文字列一致インスタンスを検索または置換するスクリプトを作成しようとしています。
vc/integer
/etc/securetty ファイルには次の文字列が含まれています。
vc/1
vc/2
vc/3
vc/4
vc/5
vc/6
vc/7
vc/8
vc/9
vc/10
vc/11
grep -E 'vc/(\d{0,4}\D)*' /etc/securetty | while read line; do sed -ie "s=$line==g" /etc/securetty; done
予想通り、上記のコマンドは上記のすべての文字列を削除しましたが、最後の2つの文字列vc / 1の一部である2番目の数字0と1は削除しませんでした。0VC/11。次の内容を含むファイルが残りました。
0
1
1桁と2桁の一致を削除するようにコマンドを変更するにはどうすればよいですか?
答え1
ただこのようにしてみるのはどうですか?
sed -i -e 's|vc/[0-9]\{1,\}||g' /etc/security
説明する:
= regex
[0-9]\{1,\}
> 1つ以上の以前の原子と一致します。あなたの場合はまさにです[0-9]
。\d+
私が提供したものと同じですが、POSIX [0-9]\{1,\}
sedと互換性がありません。もう一度[0-9]\{0,\}
言うが\d*
。