Для меня проблема была связана с тем, что порт не был открыт. Так что я должен был сделать:sudo iptables -A INPUT -p tcp --dport 6379 -j ACCEPT
Насколько я понимаю, вы хотите заменить строку, состоящую только из слова this
и следующей за ней новой строки, на test
,так
foo
this
this is a test
должно стать
foo
testthis is a test
В sed
вы можете просто соединить следующую строку с N
и заменить все до новой строки:
sed '/^this$/{N;s/.*\n/test/;}'
Я бы предложил использовать здесь perl
, синтаксис не сильно отличается от sed
для этого случая:
$ cat ip.txt
this
this is a test
another test?
$ perl -pe 's/^this\n/XYZ/' ip.txt
XYZthis is a test
another test?
Включите это, или, как указали другие, возможно «объединение» строк в sed:
sed ':a;/^this$/{N;s/\n//;ba}' testfile
результат:
thisthis is a test
another test?
Чтобы также сделать замену:
sed 's/^this$/test/g;:a;/^test$/{N;s/\n//;ba}' testfile
testthis is a test
another test?
Взято из этого ответа.
Использованиеawk
:
awk '/^this$/{$0="test"}1' file
В этой команде, если шаблон найден, он заменяется на замена.
Осталось удалить новую строку после замены, потому что новая строка все еще существует. printf
сделает эту работу потому что в отличие от print
это не добавляет новую строку в конце по умолчанию.
Это:
awk '/^this$/{printf "%s", "test"; next} 1' file
И это работает.
С помощью GNU sed вы можете прочитать все строки в память с помощью -z
и выполнить сопоставление оттуда, например.:
sed -z 's/this\n/test/'
Один из способов использования awk путем манипулирования разделителем выходных записей:
$ awk '{ ORS = sub(/^this$/,"FOO") ? "" : RS }1' file
$ sed -e '
$!N
s/^this\n/FOO/;t
P;D
' file