Решение awk
:
wc -l /path/to/dir/* | head -n -1` | awk '$1>1 {print $2}' | xargs rm
Примечания:
wc -l
считает не строки, а количество переводов строки. Таким образом, файл с двумя строками (, но без LF на второй ), будет сообщен как имеющий строку «1». Чего вам не хватает, так это того, что .*
соответствует жадно , потребляя столько символов, сколько может (, включая любые "
до последнего ).
Вы можете либо исключить "
из «всего между», используя [^"]*
, либо переключиться на движок регулярных выражений, который предоставляет не -жадный модификатор, такой как Perl.*?
$ printf '%s\n' 'href="https://unix.stackexchange.com/"' | sed 's/^[^"]*"//'
https://unix.stackexchange.com/"
$ printf '%s\n' 'href="https://unix.stackexchange.com/"' | perl -pe 's/^.*?"//'
https://unix.stackexchange.com/"
OTOH, если вам действительно нужен пустой URL-адрес, вы можете сопоставить и захватить все, что находится между первой и последней цитатой, и использовать обратную ссылку для повторной -замены только этого:
$ printf '%s\n' 'href="https://unix.stackexchange.com/"' | sed 's/^[^"]*"\(.*\)"/\1/'
https://unix.stackexchange.com/
Исходное выражение ^[^"]*
больше не обязательно должно быть не -жадным и может быть заменено на ^.*
в этом контексте, поскольку регулярное выражение в целом не может потреблять первое "
, по-прежнему совпадая с second (хотя жадность может привести к ненужному возврату ).
Вы можете сопоставить все до первого"
с:
sed 's/^[^"]*"//'
Это будет соответствовать с начала строки ^
нескольким (нулю или более*
)символов, которые являются не двойными кавычками ([^"]
), за которыми следует двойная кавычка "
.
awk -F "=" '{gsub("^\"","",$2);print $2}' filename
выход
https://unix.stackexchange.com/"
Предположим, если вы хотите удалить завершающие кавычки, мы можем использовать приведенную ниже команду
awk -F "=" '{gsub("\"","",$2);print $2}' filename
выход
https://unix.stackexchange.com/
Использованиеgawk
:
awk '{print gensub(/(^.*")(.*")/, "\\2", "g");}' input
В этой команде gawk
, встроенная -в функцию gensub()
, заменяет все захваченные группы второй захваченной группой, используя обратную ссылку(\\2
).
Если мы хотим удалить завершающую кавычку, то команду можно изменить на эту:
awk '{print gensub(/(^.*")(.*)(")/, "\\2", "g");}' input
Если вы не хотите полагаться на знак равенства, это должно сработать.
Эти первые два работают только с grep
, который поддерживает PCRE
, а GNU grep
на вашем ubuntu
поддерживает:
printf "%s\n" 'href="https://unix.stackexchange.com/"' | grep -Po '(?<=")[^"]*'
Или
printf "%s\n" 'href="https://unix.stackexchange.com/"' | grep -Po '(?<=").+(?=")'
Они бегают повсюду:
printf "%s\n" 'href="https://unix.stackexchange.com/"' | sed 's/[^"]*//; s/"//g'
Или
printf "%s\n" 'href="https://unix.stackexchange.com/"' | awk -F '"' '{print $2}
Для этого cut
была изобретена такая работа:
$ cut -d'"' -f2 file
https://unix.stackexchange.com/