web-dev-qa-db-ja.com

Sed And Regexを使用した文字列の置換

Sedを使用して正規表現を使用してファイルコンテンツのコメントを解除しようとしています(例:[0-9] {1,5})

# one two 12
# three four 34
# five six 56

以下が機能しています:

sed -e 's/# one two 12/one two 12/g' /file

しかし、私が望むのは、正規表現パターンを使用して、数字を入力せずにすべての一致を置換し、結果に数字を保持することです。

19
tangi

サンプルの質問に準拠するには、単に

sed 's/^# //' file

十分ですが、特定の正規表現を含む一部の行でのみコメントを削除する必要がある場合は、条件付きのaddressを使用できます。

sed '/regex/s/^# //' file

したがって、regexを含むすべての行はuncomented(if linebegin#

... regex[0-9]$のようになります:

sed '/[0-9]$/s/^# //' file

最後の文字として数字を含む行の先頭の#を削除します。

15
F. Hauri
sed -e 's/^#\s*\(.*[0-9].*\)$/\1/g' filename

それを行う必要があります。

7
Charles Engelke

番号を含む行のコメントを外したい場合は、これを使用できます。

sed -e 's/^#\s*\(.*[0-9]+.*\)/\1/g' file
0
Hari Menon

それぞれのファイルで置換するための-iオプションは不要ですか?次を使用して、先頭の#を削除します。

sed -i "s/^# \(.*\)/\1/g" file

少なくとも1桁のシーケンスで終わるコメント行のみのコメントを解除するには、次のように使用します。

sed -i "s/^# \(.*[[:digit:]]\+$\)/\1/g" file

このソリューションでは、1つのスペース文字(#の直後)で始まるコメント行が必要ですが、該当しない場合は簡単に調整できるはずです。

0
J. Katzwinkel

次のsedコマンドは、数字を含む行のコメントを解除します。

sed 's/^#\s*\(.*[0-9]\+.*$\)/\1/g' file
0
dogbane