最後の下線の後とファイル拡張子の前の文字列を削除するには、Unixコマンドを使用してファイルの内容を編集したいと思います。

最後の下線の後とファイル拡張子の前の文字列を削除するには、Unixコマンドを使用してファイルの内容を編集したいと思います。

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で書かれているので、移植性に優れています。

http://man7.org/linux/man-pages/man1/rename.1.html

答え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

関連情報