sed:「改行文字を除くすべての文字」を一致させるポータブルソリューション

sed:「改行文字を除くすべての文字」を一致させるポータブルソリューション

改行文字を次のように一致させることができます\n

echo "one
two" | sed 'N;s/\n/_/g'

GNUでは、改行文字を除くすべての文字を一致させるsedことができます。[^\n]

echo "one
two" | sed 'N;s/[^\n]/_/g'

これは非常に便利ですが、POSIXに違反します。他のバージョンsedに対する正解__n______

タブと同じですが、実際のタブ(前にctrl-v)を使用して解決できました。しかし、これは改行文字では機能しません。

echo "one
two" | sed 'N;s/[^
]/_/g'

私にしてくださいunbalanced brackets

[^[:cntrl:]]一致させたい他の制御文字がない場合にのみ使用してください。

それでは、POSIXで改行を除くすべての文字を一致させる正しい方法は何ですかsed

ベストアンサー1

ご質問を正確に理解していない可能性がありますが、ご回答いたします。

改行を除くすべての文字を一致させるには、単純な正規表現ポイントが.正確に対応することを行います。改行文字を除くすべての文字と一致します。

Gnuではなくsedで試してみましょう。

$ cat file5
home
help
variables
compatibility

$ sed 's/./_/g' file5
____
____
_________
_____________

$ echo "one
two
three
four" |sed 's/./_/g'
___
___
_____
____

しかし、最初のsedの例は次のとおりです。

echo "one
two" | sed 'N;s/\n/_/g'

すべての新しい行ではなく、次の新しい行にのみ一致します。

$ echo "one
> two
> three
> four" |sed 'N;s/\n/_/g'
one_two
three_four

おすすめ記事