Как я заменяю определенный текст соответствующим номером строки с помощью sed?

Два простых правила:

  • Обратная косая черта \C выходит из следующего символа, независимо от того, что это кроме новой строки.
  • Одинарные кавычки 'text' выйдите из любого символа между ними, включая обратную косую черту, но не включая одинарную кавычку (так как он отмечает конец заключенного в кавычки текста).

Таким образом:

grep -P '<html>' myfile
grep -P \<html\> myfile
grep -P '(?<!<)html' myfile
grep -P \(\?\<\!\<\) myfile

Если необходимо передать аргумент, который содержит одинарные кавычки, можно использовать '\'' “выйти” из одинарной кавычки в одинарных кавычках. Технически, то, что это делает, закончить первый буквенный текст, затем поместите литерал ' в том же слове, затем более буквенный текст все еще в том же слове.

grep '^D'\''oh!' myfile

Остальная часть (полученных в итоге) правил заключения в кавычки:

  • Необходимо заключить следующим символам в кавычки по крайней мере некоторые времена: пробел и !"#$&'()*;<>?[\]^`{|}~ (другими словами, следующие символы безопасны: буквы, цифры, %+,-./:=@_ и символы неASCII).
  • Между двойными кавычками все символы используются буквально кроме "$\` и (в оболочках с включенной историей) !. Обратная косая черта между двойными кавычками появится в строке, если она не будет предшествовать одному из небуквенных символов.

Эти правила для удара и других оболочек стиля Границы (таких как пепел и ksh). Они относятся к zsh также (за исключением того, что = после того, как пробелу, возможно, понадобится заключение в кавычки). Правила в csh/tcsh и у Рыбы отличаются.

2
25.08.2011, 19:36
1 ответ

Это очень просто с awk (благодаря @glenn jackman):

awk '/Sequence: n/ { $2 = NR } { print }' input-file

Относительно sed, Я только смог сделать это с разработкой с двумя передачами (протестированный с GNU sed и с ssed:):

sed '/^Sequence: n$/{s/n$//p;=;d;}' | sed '/^Sequence: $/{N;s/\n//;}' 

Первые вставки номер строки в строке после "Последовательности": вторые соединения эти две строки.

4
27.01.2020, 22:01
  • 1
    , я записал бы Вашу команду awk как: awk '/Sequence: n/ {$2 = NR} {print}' –  glenn jackman 26.08.2011, 00:22
  • 2
    @glenn jackman: хорошо сделанный, мое плохое. –  enzotib 26.08.2011, 10:22

Теги

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