Присоединение к концу строки, в то время как определенное вхождение образца совпадает - PullRequest
0 голосов
/ 17 мая 2018

File1:

abcxyz 
b 
abcxyz 
abcxyz 
b 
c

OutputFile:

abcxyz 
b 
abcxyz someValueAddedHere 
abcxyz 
b 
c

sed '/^abcxyz/ s/$/ someValueAddedHere/2' File1

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

Спасибо за редактирование, Добрый день, сэр

Ответы [ 3 ]

0 голосов
/ 17 мая 2018

sed предназначен для выполнения s/old/new/, , то есть всего . Конструкции sed для выполнения чего-либо еще устарели в середине 1980-х годов, когда был изобретен awk, и используются сегодня только для умственных упражнений, а не для реального решения проблем, поскольку эквивалент awk всегда будет неким сочетанием более эффективной, более переносимой , более надежный, простой и понятный.

$ awk '/abcxyz/ && (++c == 2){$0 = $0 " someValueAddedHere"} 1' file
abcxyz
b
abcxyz  someValueAddedHere
abcxyz
b
c
0 голосов
/ 17 мая 2018

с sed для умственных упражнений

sed '
  /^abcxyz/!b
 :A
  $b
  N
  /\nabcxyz/!bA
  s/$/ someValueAddedHere/
 :B
  n
  bB
' File1

Или с GNU sed

sed -z 's/\(\nabcxyz\)/& someValueAddedHere/' File1
0 голосов
/ 17 мая 2018

После awk может помочь вам в этом же.Я считаю, что вам нужно второе вхождение abcxyz в Input_file, где вам нужно вставить строку.Вы также можете изменить количество вхождений в коде.

awk '/abcxyz/{count++} /abcxyz/ && count==2{print $0,"someValueAddedHere";next} 1'  Input_file

Если вам нужно сохранить выходные данные в самом файле Input_file, тогда добавьте > tmp_file && mv tmp_file Input_file к вышеуказанному коду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...