sed _1 は _10 _11 ではありません。

sed _1 は _10 _11 ではありません。

私のデータ構造は次のようになり、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

関連情報