Как найти слово и добавить текст после него в .txt-файл?

Как найти слово (например, «/ dn») в текстовом файле и добавить на следующей строке другое слово (например, «/ period»)?

Я хотел бы выполнить его используя MS DOS.

Я имею в виду, что это «/ dn» (после / dn есть пробел) - это одно слово (не фрагмент текста, а целое слово - после / dn может быть другим словом on ту же строку), которую я хочу найти, а затем после нее на следующей новой строке, не заменяя другие строки и другие слова. Я хочу создать новую строку между уже существующими строками.

Например, если у меня есть этот входной файл:

/dn /name

Я хочу этот вывод:

/dn /period /name

и символ «/» должны быть с dn, а не без него.

4
задан 27 July 2017 в 04:36

4 ответа

Если file.txt содержит строку /dn, тогда вы можете запустить эту команду:

$ grep -i "\/dn" file.txt | xargs -I{} printf "%s\n/period" {}

Он выведет

/dn /period
0
ответ дан 18 July 2018 в 09:39
[D0] 1. Используя sed append

Если вы хотите получить новую строку со словом /period после каждой строки, содержащей /dn, используйте sed append:

sed '\:\dn:a/period' filename

выход для вашего образца будет:

/dn /period /name

1. Примечания

:\dn: искать \dn a/period добавить /period в следующую строку (новая строка).

2. Поиск и добавление в конец следующей строки

Если вы хотите /period в конце следующей строки, используйте его следующим образом:

sed ':/dn: { N; s:$:/period: }' filename

Вот пример вход:

/dn /name

и выход:

/dn /name /period

2. Примечания

Сначала мы ищем строки с /dn, затем добавляем /period в конце следующей строки [$) (N;).

10
ответ дан 18 July 2018 в 09:39

Если file.txt содержит строку /dn, тогда вы можете запустить эту команду:

$ grep -i "\/dn" file.txt | xargs -I{} printf "%s\n/period" {}

Он выведет

/dn /period
0
ответ дан 24 July 2018 в 19:23
  • 1
    i) почему вы делаете этот регистр нечувствительным? Это также будет соответствовать Dn/, dN/ и DN/. ОП указывает только dn /. ii) В чем смысл grep? Это напечатает всю строку, соответствующую dn/, а не только dn/. Что еще более важно, это будет игнорировать все строки, которые не имеют /dn, поэтому измените вход OP. iii) вам действительно не нужны -I{} или {}, это поведение по умолчанию xargs. iv) вы можете добавить \n после /period. vi) Вам также не нужно избегать / для grep: grep /dn file.txt работает нормально. – terdon♦ 26 July 2017 в 13:57
[D0] 1. Используя sed append

Если вы хотите получить новую строку со словом /period после каждой строки, содержащей /dn, используйте sed append:

sed '\:\dn:a/period' filename

выход для вашего образца будет:

/dn /period /name

1. Примечания

:\dn: искать \dn a/period добавить /period в следующую строку (новая строка).

2. Поиск и добавление в конец следующей строки

Если вы хотите /period в конце следующей строки, используйте его следующим образом:

sed ':/dn: { N; s:$:/period: }' filename

Вот пример вход:

/dn /name

и выход:

/dn /name /period

2. Примечания

Сначала мы ищем строки с /dn, затем добавляем /period в конце следующей строки [$) (N;).

10
ответ дан 24 July 2018 в 19:23
  • 1
    ОП очень трудно понять, но я думаю, что они хотят, чтобы /period был напечатан на следующей строке . – terdon♦ 26 July 2017 в 13:56
  • 2
    Обновлен ответ;) – Ravexina 26 July 2017 в 13:59
  • 3
    для noobs, вы можете показать полный код CMD. используя мой пример – Lunsy 26 July 2017 в 17:16
  • 4
    @Lunsy обновил ответ. – Ravexina 26 July 2017 в 21:51

Другие вопросы по тегам:

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