добавление новой строки командой sed в bash - PullRequest
0 голосов
/ 02 декабря 2018

Привет, у меня проблемы с добавлением новой строки командой sed.Мне было поручено написать команду, которая обновляет файл хоста.Кроме того, моя команда sed написана в bash-скрипте, хотя она выдает сообщение об ошибке.В нем сказано: «sed: -e выражение # 1, символ 93: дополнительный символ после команды».

это аргумент, который я хочу добавить в свой файл hosts.

# Gateway
10.0.0.1    schoolhost  it20
# Addresses for the Windows
10.0.0.240  host1 it21
10.0.0.241  host2 it22

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

sed -i "/hosts/a \
\n# Gateway \
\n10.0.0.1    schoolhost  it20 \
\n# Addresses for the Windows PCs \
\n10.0.0.240  host1 it21 \
\n10.0.0.241  host2 it22" hosts

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Дано:

$ cat file
line 1
line 2
line 3

И:

$ echo "$add_this"
# Gateway
10.0.0.1    schoolhost  it20
# Addresses for the Windows
10.0.0.240  host1 it21
10.0.0.241  host2 it22

Вы можете сделать несколько вещей, чтобы добавить эти текстовые элементы вместе.

Первое - использовать cat (напоминая имя происходит от con cat tenate):

$ cat file <(echo "$add_this")
line 1
line 2
line 3
# Gateway
10.0.0.1    schoolhost  it20
# Addresses for the Windows
10.0.0.240  host1 it21
10.0.0.241  host2 it22

Или вы можете использовать awk таким же образом:

$ awk '1' file <(echo "$add_this")
# same output

Или,пустая sed:

$ sed -e '' file <(echo "$add_this") 
# same output

Или с printf:

$ printf "%s%s\n" "$(cat file)" "$add_this"
# same output

Суть в том, что вы добавляете только две части текста вместе, и в Unix есть много способовсделай это.

Затем перенаправьте вывод любого из них (вероятно, cat) во временный файл, затем переместите временный файл в исходный файл:

$ cat file <(echo "$add_this") >/tmp/tmp_file && mv /tmp/tmp_file file
$ cat file
line 1
line 2
line 3
# Gateway
10.0.0.1    schoolhost  it20
# Addresses for the Windows
10.0.0.240  host1 it21
10.0.0.241  host2 it22
0 голосов
/ 03 декабря 2018

Я не вижу необходимости в sed здесь.Просто используйте cat и документ здесь.

cat <<EOF >> hosts
# Gateway
10.0.0.1    schoolhost  it20
# Addresses for the Windows
10.0.0.240  host1 it21
10.0.0.241  host2 it22
EOF
...