Добавить текст в конце каждой строки
Я в командной строке 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 все еще не ясно, как это сделать в командной строке?
Ответы
Ответ 1
Вы можете попробовать что-то вроде:
sed 's/$/:80/' ips.txt > new-ips.txt
При условии, что формат файла такой же, как вы описали в своем вопросе.
Команда подстановки s///
соответствует (находит) конец каждой строки в вашем файле (используя символ $
) и затем добавляет (заменяет) :80
к конец каждой строки. Файл ips.txt
является вашим входным файлом... а new-ips.txt
является вашим вновь созданным файлом (конечный результат ваших изменений.)
Кроме того, если у вас есть список IP-номеров, к которым уже подключены номера портов (как отмечено Владом и как указано aragaer,), вы можете попробовать использовать что-то вроде:
sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt
Так, например, если ваш входной файл выглядел примерно так (обратите внимание на :80
):
127.0.0.1
128.0.0.0:80
121.121.33.111
Конечный результат будет выглядеть примерно так:
127.0.0.1:80
128.0.0.0:80
121.121.33.111:80
Ответ 2
Если вы хотите добавить текст в конце каждой строки на месте (в том же файле), вы можете использовать параметр -i
, например:
sed -i'.bak' 's/$/:80/' foo.txt
Однако параметр -i
является нестандартным расширением Unix и может быть недоступен во всех операционных системах.
Итак, вы можете использовать ex
(что эквивалентно vi -e
/vim -e
):
ex +"%s/$/:80/g" -cwq foo.txt
который добавит :80
к каждой строке, но иногда он может добавить его в пустые строки.
Таким образом, лучший способ - проверить, действительно ли строка содержит любое число, а затем добавить его, например:
ex +"g/[0-9]/s/$/:80/g" -cwq foo.txt
Если файл имеет более сложный формат, подумайте об использовании правильного регулярного выражения, а не [0-9]
.
Ответ 3
sed 's/.*/&:80/' abcd.txt >abcde.txt
Ответ 4
Краткая версия команды sed:
sed -i s/$/:80/ file.txt
Объяснение:
sed
s tream ed itor
-i
i n-place (редактировать файл на месте)
s
команда s
/replacement_from_reg_exp/replacement_to_text/
выражение
$
соответствует концу строки (replace_from_reg_exp)
:80
текст, который вы хотите добавить в конце каждой строки (replace_to_text)
file.txt
имя файла
Ответ 5
Используя текстовый редактор, проверьте в ^M
(control-M или возврат каретки) в конце каждой строки. Сначала вам нужно удалить их, а затем добавить дополнительный текст в конце строки.
sed -i 's|^M||g' ips.txt
sed -i 's|$|:80|g' ips.txt
Ответ 6
sed -i 's/$/,/g' foo.txt
Я делаю это довольно часто, чтобы добавить запятую в конец вывода, чтобы я мог легко скопировать и вставить ее в массив Python (или ваш любимый язык)