Для $'...'
, как и в струнах C, \f
представляет собой форму -feed (FF, ^L ). Новая строка — это \n
строка -подача (LF, ^J ). В стандарте sed
в замещающей части команды s
она должна быть вставлена с \
, за которым следует символ LF :
Так ты хочешь:
#! /bin/sh -
< file.txt sed '
s|^some-string|\
&|'
С$'...'
:
#! /bin/bash -
< file.txt sed $'s|^some-string|\\\n&|'
В реализации GNU sed
вы также можете использовать \n
для обозначения новой строки/LF в замене:
#! /bin/sh -
< file.txt gnu-sed 's|^some-string|\n&|'
В любом случае, ни в одной из этих команд нет апострофа, переданного в sed
. '...'
и $'...'
являются кавычками операторов оболочки, первый (стандарт )использовался для дословной передачи того, что внутри, в sed
, второй (расширение ksh93 теперь поддерживается несколькими другими оболочками. в том числеbash
)используется для расширения таких последовательностей, как \f
, \n
в них перед переходом к sed
.
Если вы хотите передать литерал '
в sed
, например, чтобы передать ему команду y/'/"/
для замены '
на "
, вы должны использовать оператор кавычек оболочки, который позволяет передавать '
,который включает в себя все операторы цитирования , кроме самого'...'
:
sed $'y/\'/"/' # $'...' quoting operator
sed "y/'/\"/" # "..." quoting operator
sed y/\'/\"/ # \x quoting operator
Я нашел следующую страницу, на которой был исправлен мой DNS для Arch Linux ARM. Мне пришлось использовать решение 3, чтобы оно наконец заработало, и я также отключил systemd -.