在包含文件名列表的文件中用 ',' 替换 '_'

Sam*_*rmi 3 shell awk shell-script text-processing


如果有人可以帮助编写一个shell脚本来满足以下要求,这对我会有帮助。

我有一个包含文件名列表的文本文件,如下所示:

ADB_AR_2006_07.pdf
ADBL_AR_2010_11.pdf
CBL_AR_2013_14.pdf
CZBIL_AR_2007_08.pdf
BOKL_AR_2015_16.pdf
..
..
Run Code Online (Sandbox Code Playgroud)

现在我想将文本文件中列出的所有文件名的第一个和第二个 '_' 替换为 ','。这样文件名就变成:

ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf
..
..
Run Code Online (Sandbox Code Playgroud)

Rom*_*est 5

您可以使用一个简单的sed表达式:

sed -Ei 's/^([^_]+)_([^_]+)_/\1,\2,/' file
Run Code Online (Sandbox Code Playgroud)

file 修改后的内容:

ADB,AR,2006_07.pdf
ADBL,AR,2010_11.pdf
CBL,AR,2013_14.pdf
CZBIL,AR,2007_08.pdf
BOKL,AR,2015_16.pdf
Run Code Online (Sandbox Code Playgroud)
  • i - 允许就地文件修改

  • -E - 允许扩展正则表达式


一种简化的方法如下:

sed -i 's/_/,/; s/_/,/' file
Run Code Online (Sandbox Code Playgroud)

  • 只需按照 OP 所说的`用 ','` 替换第一个和第二个 '_' ... `sed 's/_/,/; s/_/,/'` (2认同)