Баш как добавить слово в конец строки?
Я выполнил команду в bash, чтобы получить некоторые адреса из файла, как это:
grep address file.txt | cut -d'=' -f2 | tr ':' ' '
выходы:
xxx.xx.xx.xxx port1
xxx.xx.xx.xxx port2
и я хотел бы добавить "eth0" к каждой из этих выходных строк, а затем идеально для цикла над результатом, чтобы вызвать команду с каждой строкой. Проблема в том, что у меня есть дополнительная строка в конце каждой строки. Я попробовал:
| sed -e 's/(.+)n/ eth0/g'
что не сработало..а потом предположим, что я получил его там, если я оберну его в петлю for, он не будет передайте полные строки, так как они содержат пробелы. Так как мне это сделать?
5 ответов
вы можете соответствовать $
чтобы добавить к строке, например:
sed -e 's/$/ eth0/'
EDIT:
чтобы зациклиться на линиях, я бы предложил использовать while
петли, как:
while read line
do
# Do your thing with $line
done < <(grep address file.txt | cut -d'=' -f2 | tr ':' ' ' | sed -e 's/$/ eth0')
как насчет просто с помощью awk
:
awk -F= '/address/{gsub(/:/," ");print ,"eth0"}' file
демо:
$ cat file
junk line
address=192.168.0.12:80
address=127.0.0.1:25
don not match this line
$ awk -F= '/address/{gsub(/:/," ");print ,"eth0"}' file
192.168.0.12 80 eth0
127.0.0.1 25 eth0
или sed
:
$ sed -n '/address/{s/:/ /g;s/.*=//;s/$/ eth0/p}' file
192.168.0.12 80 eth0
127.0.0.1 80 eth0
все, что вам нужно, это:
awk -F'[=:]' '{print , , "eth0"}' file.txt |
while IFS= read -r ip port eth
do
printf "ip=%s, port=%s, eth=%s\n" "$ip" "$port" "$eth"
done
всегда используйте IFS= и-r при использовании read, если у вас нет очень конкретной причины не делать этого. Google для почему.
это нормально для вас?
kent$ echo "xxx.xx.xx.xxx port1
xxx.xx.xx.xxx port2"|sed 's/.*/& eth0/'
xxx.xx.xx.xxx port1 eth0
xxx.xx.xx.xxx port2 eth0
P. S Вы можете объединить свой cut, tr (даже grep в вашем примере) в один вызов sed/awk, чтобы сделать cmdline проще и быстрее.
typeset TMP_FILE=$( mktemp )
touch "${TMP_FILE}"
cp -p filename "${TMP_FILE}"
sed -e 's/$/stringToAdd/' "${TMP_FILE}" > filename