Баш как добавить слово в конец строки?

Я выполнил команду в 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