Я в командной строке Linux, и у меня есть файл с
127.0.0.1
128.0.0.0
121.121.33.111
я хочу
127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
Я помню, что мои коллеги использовали для этого sed, но после прочтения руководства по sed все еще не ясно, как это сделать в командной строке?
Ответы:
Вы можете попробовать использовать что-то вроде:
При условии, что ваш формат файла такой, как вы описали в своем вопросе.
Команда
s///
подстановки сопоставляет ( находит ) конец каждой строки в вашем файле (используя$
символ), а затем добавляет ( заменяет ):80
до конца каждой строки.ips.txt
Файл представляет собой входной файл ... иnew-ips.txt
ваш вновь созданный файл ( конечный результат ваших изменений. )Кроме того, если у вас есть список IP-адресов, к которым уже прикреплены номера портов (как отметил Влад и предоставил aragaer ), вы можете попробовать использовать что-то вроде:
Так, например, если ваш входной файл выглядел примерно так (обратите внимание на
:80
) :Окончательный результат будет выглядеть примерно так:
источник
sed '/:[0-9]*$/ ! s/$/:80/'
:80
они будут добавлены в начало следующей строки. Приdos2unix
необходимости сначала используйте файл.-n
необходимо? вероятно, не для большинства пользователей.Краткая версия команды sed :
Пояснение:
sed
s Tream ред itor-i
i n-place (редактировать файл на месте)s
s ubstitution команда/replacement_from_reg_exp/replacement_to_text/
заявление$
соответствует концу строки ( replace_from_reg_exp ):80
текст, который вы хотите добавить в конец каждой строки ( replace_to_text )file.txt
имя файлаисточник
источник
Если вы хотите добавить текст в конце каждой строки на месте (в том же файле), вы можете использовать
-i
параметр, например:Однако
-i
опция является нестандартным расширением Unix и может быть доступна не во всех операционных системах.Итак, вы можете использовать
ex
(что эквивалентноvi -e
/vim -e
):который будет добавляться
:80
к каждой строке, но иногда может добавлять его к пустым строкам.Поэтому лучший способ - проверить, действительно ли строка содержит какое-либо число, а затем добавить его, например:
Если файл имеет более сложный формат, рассмотрите возможность использования правильного регулярного выражения вместо
[0-9]
.источник
Используя текстовый редактор, проверьте наличие
^M
(Control-M или возврата каретки) в конце каждой строки. Вам нужно сначала удалить их, а затем добавить дополнительный текст в конце строки.источник
Вы также можете добиться этого, используя технику обратной ссылки
Вы также можете использовать с awk вот так
источник
sed -i 's / $ /, / g' foo.txt
Я делаю это довольно часто, чтобы добавить запятую в конец вывода, чтобы я мог просто скопировать и вставить его в массив Python (или ваш любимый язык)
источник