вируса, который[113259], кажется, хорошо охватывает большинство случаев...
I [112677]do[112678], как и отказ от ответственности авторов:
В большинстве случаев использование этой программы является неправильным. Вместо этого вы должны обнаружить [113260]специфические [113261] возможности, которые вы на самом деле хотите использовать.
Мое предпочтение состоит в том, чтобы якорь к началу строки, чтобы уменьшить отслеживание спины, и мне нравится расширенные регессы, поэтому я бы использовал
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
Можно сделать
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 цифрам в конце, и вывести эти совпадения с пробелом между ними. Это оставит все остальные строки без изменений.