замените энное происшествие строки в каждой строке текстового файла

У меня есть файлы крупного текста с разграниченными строками пространства (2-5). Строки могут содержать" '" или "-". Я хотел бы заменить, говорят что второе пространство с каналом.

Что состоит в том, чтобы пойти лучший способ?

Используя sed я думал об этом:

sed -r 's/(^[a-z'-]+ [a-z'-]+\b) /\1|/' filename.txt

Какие-либо other/better/simpler идеи?

14
задан 09.04.2017, 15:17

2 ответа

Можно добавить число в конце команды замены. Например, следующее заменит вторым возникновением old со строкой new на каждой строке file:

sed 's/old/new/2' file

Так, вместо Вашего предлагаемого решения можно использовать:

sed 's/ /|/2'

Для получения дополнительной информации посмотрите, например, это sed учебное руководство.

20
ответ дан 07.12.2019, 11:18

Вы пробовали свою версию? Это работало? Поскольку я думаю, что это - в основном хорошая идея. Я сделал бы немного по-другому, хотя:

sed -re 's/^([^ ]+ +[^ ]+) /\1|/'

Это примет любые символы, одним словом, который не является пространством и примет больше чем одни пробелы между первыми двумя словами.

1
ответ дан 07.12.2019, 11:18

Теги

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