Команда bash find не работает над разверткой каталога [duplicate]

Один лайнер:

Object.assign(document.createElement('a'), { target: '_blank', href: 'URL_HERE'}).click();

или

С помощью jQuery я использую этот:

var url = "http://google.com";
$("<a>").attr("href", url).attr("target", "_blank")[0].click();

Он создает виртуальную a элемент, дает ему target="_blank", поэтому он открывается в новой вкладке, дает ему url href и затем нажимает на него.

И если вы хотите, на основе этого вы можете создать некоторую функцию:

function openInNewTab(url) {
    $("<a>").attr("href", url).attr("target", "_blank")[0].click();
}

, а затем вы можете использовать его как:

openInNewTab("http://google.com");

Для сценария, отличного от jQuery, функция будет выглядеть так:

function openInNewTab(url) {
    var a = document.createElement("a");
    a.target = "_blank";
    a.href = url;
    a.click();
}

// And then
openInNewTab("http://google.com");
55
задан Saobi 1 July 2009 в 15:06
поделиться

10 ответов

Звездочка - это только оператор повторения , но вам нужно сказать, что вы повторяете. /*abc*/ соответствует строке, содержащей ab и ноль или больше c (потому что второй * находится на c; первый не имеет смысла, потому что ему нечего повторять). Если вы хотите что-то сопоставить, вам нужно сказать .* - точка означает любой символ ( в определенных рекомендациях ). Если вы хотите просто совместить abc, вы можете просто сказать grep 'abc' myFile. Для вашего более сложного соответствия вам нужно использовать .* - grep 'abc.*def' myFile будет соответствовать строке, содержащей abc, затем def с чем-то опционально между ними.

Обновление на основе комментария:

* в регулярном выражении не совсем совпадает с * в консоли. В консоли * является частью glob construct и просто выступает в качестве подстановочного знака (например, ls *.log перечисляет все файлы, которые заканчиваются на .log). Однако в регулярных выражениях * является модификатором, что означает, что он применяется только к предшествующему ему персонажу или группе. Если вы хотите, чтобы в регулярных выражениях * в качестве подстановочных знаков вам нужно было использовать .*, как указано выше, точка является символом подстановки, а звезда при изменении точки означает поиск одной или нескольких точек; то есть. найдите один или несколько символов.

75
ответ дан Daniel Vandersluis 18 August 2018 в 22:29
поделиться
  • 1
    Я думаю, что вопросник запутался в различии между групповыми символами оболочки и регулярными выражениями. Я также подозреваю, что более сложным выражением будет: grep 'abc. * Def' (по крайней мере одно пространство присутствует - возможно, два, как я писал). – Jonathan Leffler 1 July 2009 в 15:18
  • 2
    Собственно, вопросник, похоже, не понимает, что «abc» - это не то же самое, что «^ abc $» :-D – Massa 1 July 2009 в 17:54
  • 3
    Да, я был смущен между glob и полными регулярными выражениями. Я использую * без точки, чтобы означать согласование чего-либо на оболочке. – Saobi 1 July 2009 в 19:56
  • 4
    grep * означает «0 или более», а grep по умолчанию является жадным. Обратите внимание, что в регулярных выражениях grep basic метасимволы ?, +, {, |, ( и ) теряют свое особое значение. Дополнительная информация: grep regexps – KrisWebDev 17 October 2015 в 19:07

Вы не используете регулярные выражения, поэтому ваш вариант выбора grep должен быть fgrep, который будет вести себя так, как вы ожидаете.

4
ответ дан Andrew Beals 18 August 2018 в 22:29
поделиться

Использовать grep -P - который позволяет поддерживать регулярные выражения в стиле Perl.

grep -P "abc.*def" myfile
2
ответ дан Artem Russakovskii 18 August 2018 в 22:29
поделиться

Попробуйте grep -E для расширенной поддержки регулярных выражений

Также посмотрите:

Страница grep man

2
ответ дан Brian 18 August 2018 в 22:29
поделиться

'*' работает как модификатор для предыдущего элемента. Таким образом, «abc * def» ищет «ab», за которым следуют 0 или более «c», которые следуют «def».

То, что вы, вероятно, хотите, это «abc. * Def», который ищет «abc», за которым следует любое количество символов, указанное «def».

0
ответ дан Conspicuous Compiler 18 August 2018 в 22:29
поделиться

«Звездный знак» имеет смысл только в том случае, если перед ним что-то есть. Если инструмент отсутствует (grep в этом случае), можно просто рассматривать его как ошибку. Например:

'*xyz'    is meaningless
'a*xyz'   means zero or more occurrences of 'a' followed by xyz
8
ответ дан Jonathan Leffler 18 August 2018 в 22:29
поделиться
  • 1
    * Не имеет смысла; он просто не имеет своего обычного значения (повторения), но означает «Я звезда». Он будет соответствовать строке, содержащей звезду, за которой следует x, y и z. – Jonathan Leffler 1 July 2009 в 15:20
  • 2
    @Jonathan Это зависит от инструмента. – user 1 July 2009 в 15:22

Это может быть ответ, который вы ищете:

grep abc MyFile | grep def

Единственное, что есть ... он будет выводить строки «def» перед OR после «abc»

1
ответ дан Matt 18 August 2018 в 22:29
поделиться

Символ точки означает совпадение с любым символом, поэтому «. *» означает ноль или более вхождений любого символа. Вероятно, вы хотите использовать «. *», А не просто «*».

Ах, дерьмо,

12
ответ дан smcameron 18 August 2018 в 22:29
поделиться

Выражение, которое вы пытались использовать, например, те, которые работают в командной строке оболочки в Linux, называется « glob ». Выражения Glob не являются полными регулярными выражениями , что и используется grep для указания строк для поиска. Здесь (старая, маленькая) запись о различиях. Выражения glob (как в «ls *») интерпретируются самой оболочкой.

Можно перевести из globs в RE, но вам обычно нужно сделать это в своей голове.

4
ответ дан unwind 18 August 2018 в 22:29
поделиться
  • 1
    Это всего лишь глобус, если он анализируется оболочкой. Поскольку он сохраняет строку поиска внутри одинарных кавычек, оболочка оставляет строку в покое и передает ее в переменную argv в grep. – Conspicuous Compiler 1 July 2009 в 15:26
0
ответ дан access_granted 30 October 2018 в 10:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: