私のデータ構造は次のようになり、2つの列に分けられます。
ABC_1 ABC_1
XYZ_1 XYZ_1
ABC_10 ABC_10
XYZ_11 XYZ_11
試してみましたが、sed /s/_1//g file_name
やはり_10
変わりました_11
。
_1
変更せずにどのように_10
置き換えるか、何も含めないでください_11
。
答え1
正規表現を変えてください!必要に応じてアンカーポイントを追加して選択を制限します。
データをどこで読み取るかは言っていません。ファイル一覧ですか?set -- *
によって設定された位置引数として?配列?名前ごとに 1 行のファイルです。ロープ?
_1
ファイルにスペースで区切られた2つの列があるとし、単語の末尾にaを含むすべての単語を変更したいとします。または行末。次に、を使用してください_1([ ]|$)
。これは_1
、後ろにスペースがある場合、または行の末尾に一致することを意味します。
$ cat infile
ABC_1 ABC_1
XYZ_1 XYZ_1
ABC_10 ABC_10
XYZ_11 XYZ_11
$ sed -E 's/_1([ ]|$)/\1/g' infile # non-POSIX sed because of `-E`.
ABC ABC
XYZ XYZ
ABC_10 ABC_10
XYZ_11 XYZ_11