2行目の2列目(ファイル名)のファイルの内容を編集し、最後のアンダースコアの後ろとファイル拡張子の前の部分を削除したいと思います。
ファイルの内容は次のとおりです。ファイルの内容を入力してください
No|filename|count
01 |com_101_00000_0001_a234.txt|100
結果ファイルの内容
No|filename|count
01 |com_101_00000_0001.txt|100
アンダースコアは、.ctlファイルのファイル名によって異なります。このようなフォルダには複数のファイルがあり、2行目のすべての.ctlファイルの内容を同様に変更したいと思います。
Operating system details Linux 2.6.32 -696.30.1.e16
GNU/linux
答え1
ファイルの内容を変更するには、正規表現を使用してください。
perl -pi -e 's/_[^_\.]+(\.)/$1/g' *
質問が変更される前の以前の答えは、正規表現を使用してファイル名を変更します。
rename 's/_[^_\.]+(\.)/$1/g' *
Perlで書かれているので、移植性に優れています。
答え2
努力する
awk -F\| -vOFS=\| 'NR==2 {sub (/_[^_]*\./,".", $2)}1' file
No|filename|count
01 |com_101_00000_0001.txt|100
NR==2 if record count is 2 (i.e. 2. line)
sub ( `awk` "substitute" function
/_[^_]*\./ regex: match string consisting of multiple non-underscores, delimited by leading underscore and trailing literal dot
,".", with a literal dot
$2) in second field
1 do default action: print
必要に応じ>
て一時ファイルにリダイレクトmv
するか、元のファイルに戻ります。複数のファイルの場合は、すべての関連ファイルをcp
繰り返します。for