Linuxでファイルを1行ずつ読み取り、各行で部分文字列を見つけて削除し、その行の最後に配置する必要があります。
例:
元のファイルの行:
a,b,c,substring,d,e,f
出力ファイルの行:
a,b,c,d,e,f,substring
Linux コマンドを使用して行うにはどうすればよいですか? ありがとう!
sed '/substring/{ s///; s/$/substring/;} '
固定部分文字列を処理します。部分文字列が で始まる場合,
、これは例のケースを適切に処理することに注意してください。部分文字列が固定されていないが、一般的な正規表現である可能性がある場合:
sed 's/\(substring\)\(.*\)/\2\1'
一般的な csv 解析を探している場合は、質問を言い換える必要があります。(入力をカンマ区切りのフィールドと考えている場合、この解決策を適用して行頭の固定文字列を見つけるのは困難です。)
私は常に perl のコマンド ラインを使用して、そのような正規表現タスクを実行することを好みます。perl は、私のほとんどの使用法で awk と sed をカバーするのに十分強力であり、Windows と Linux の両方で使用できます。簡単で便利なので、 perl は次のようになります。
perl -ne "s/^(.*?)(?:(?<comma>,)(?<substr>substring)|(?<substr>substring)(?<comma>,))(?<right>.*)$/$1$+{right}$+{comma}$+{substr}/; print" input.txt > output.txt
またはより単純なもの:
perl -lpe "if(s/(,substring|substring,)//){ s/$/,substring/ }" input.txt > output.txt
入力.txt
substring,a,b,c,d,e,f
a,b,c,substring,d,e,f
a,b,c,d,e,f,substring
サブストリング,a
a,substring サブ
ストリング
a
output.txt
a,b,c,d,e,f,部分文字列
a,b,c,d,e,f,部分文字列
a,b,c,d,e,f,部分文字列 a,部分文字
列
a,部分文字列 部分文字
列
a
実際の入力に基づいて編集できます。
コマンドラインの説明: