9

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

Какой лучший путь?

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

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

Любые другие / лучшие / более простые идеи?

2 ответа2

13

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

sed 's/old/new/2' file

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

sed 's/ /|/2'

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

1

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .