Как я могу правильно использовать команду 'sed в этом конкретном сценарии

[112208] Сценарий

вируса, который[113259], кажется, хорошо охватывает большинство случаев...

I [112677]do[112678], как и отказ от ответственности авторов:

В большинстве случаев использование этой программы является неправильным. Вместо этого вы должны обнаружить [113260]специфические [113261] возможности, которые вы на самом деле хотите использовать.

  1. Это появилось на моих системах EL5 и EL6 в течение последних нескольких лет как часть установок по умолчанию. Ubuntu имеет его, и источник также доступен.
  2. Факты [112681]факты [112682], обнаруженные скриптом, перечислены здесь [112683], но могут быть легко расширены для крайних случаев.[112217].
2
20.03.2019, 15:10
2 ответа

Мое предпочтение состоит в том, чтобы якорь к началу строки, чтобы уменьшить отслеживание спины, и мне нравится расширенные регессы, поэтому я бы использовал

sed -re 's/^([0-9]{6}) .*( 2015)$/\1\2/' names.txt

, что это делает

-r extended regexp
-e expression to follow
s substitute
^ beginning of line
( start subpattern
[0-9] a digit
{6} previous occurs exactly six times
) end subexpression
. any single character
* previous occurs zero or more times
$ end of line
\1 first subpattern
\2 second subpattern
0
27.01.2020, 22:12

Можно сделать

sed -i -e 's/[[:space:]]\+.\+2015$/ 2015/' names.txt

, если вы хотите сохранить его в том же файле. Бросьте -i, если хотите просто распечатать в stdout, который можно перенаправить в другой файл.

Оно будет соответствовать любому количеству пробелов, за которым последует что-либо до 2015 в конце строки, затем замените это полное совпадение на "2015"

Другой возможностью будет сделать

sed -e 's/^\([[:digit:]]\{6\}\).\+\([[:digit:]]\{4\}\)$/\1 \2/'  names.txt

Которое будет соответствовать 6 цифрам в начале строки и 4 цифрам в конце, и вывести эти совпадения с пробелом между ними. Это оставит все остальные строки без изменений.

2
27.01.2020, 22:12

Теги

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