sed
BSDおよびGNUと互換性があることを望むsed代替コマンドがありますsed
。拡張正規表現はこの場合は必要ないので問題になりません。私の主な問題は、2つがsed
文字エスケープシーケンスを別々に解釈することです代替ひも。私の代替文字列にはタブと改行文字が含まれており、メンテナンスを容易にするためにコマンド文字列に表示したいと思います。しかし、sed
GNUでは、BSDはエスケープシーケンスを解釈しません。sed
する。sed
BSDでこれらのエスケープシーケンスの解釈を表す適切な方法は何ですか?次の2つの部分は私の問題を要約します。
牛に似た一種の栄養sed
echo ABC | sed 's/B/\n\tB\n'
生産する
A
B
C
BSDsed
echo ABC | sed 's/B\n\tB\n'
生産する
AntBnC
明らかにBSDは\n
解釈されず、エスケープシーケンスとして\t
sed
今私の質問に答えてください。 BSDのsed
マニュアルページによると:
代替文字列に改行文字を指定するには、その前にバックスラッシュを追加します。
これが私が最初にしなければならないという意味ですか?言葉バックスラッシュで改行?代替テキストでエスケープシーケンスの解釈を表す適切な方法は何ですかsed
?\n
ベストアンサー1
$'...'
文字列をに渡す前に、bash引用符を使用してエスケープ文字を解釈できますsed
。
Bashのマニュアルページから:
Words of the form $'string' are treated specially. The word
expands to string, with backslash-escaped characters replaced as
specified by the ANSI C standard. Backslash escape sequences, if
present, are decoded as follows:
\a alert (bell)
\b backspace
\e an escape character
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\' single quote
\nnn the eight-bit character whose value is the octal
value nnn (one to three digits)
\xHH the eight-bit character whose value is the hexadeci-
mal value HH (one or two hex digits)
\cx a control-x character
The expanded result is single-quoted, as if the dollar sign had
not been present.
A double-quoted string preceded by a dollar sign ($) will cause
the string to be translated according to the current locale. If
the current locale is C or POSIX, the dollar sign is ignored. If
the string is translated and replaced, the replacement is double-
quoted.