我想使用sed
命令在Unix中将文件名字符串化。
文件名:Test_Test1_Test2_10082019_030013.csv.20191008-075740
我希望在第三个下划线之后的字符或(在Test2之后的所有字符)需要打印。
可以使用sed
命令完成此操作吗?
我已经尝试过此命令
sed 's/^.*_\([^_]*\)$/\1/' <<< 'Test_Test1_Test2_10082019_030013.csv.20191008-075740'
但这给出的结果为030013.csv.20191008-075740
我需要10082019_030013.csv.20191008-075740
谢谢 内哈
答案 0 :(得分:3)
要从一开始就删除第三个下划线,可以使用
sed 's/^\([^_]*_\)\{3\}//' <<< 'Test_Test1_Test2_10082019_030013.csv.20191008-075740'
这将删除由3组(任意数量的非下划线字符后跟下划线)组成的初始部分。结果是
10082019_030013.csv.20191008-075740
如果使用GNU sed
,则可以将其切换为扩展的正则表达式,并省略反斜杠。
sed -r 's/^([^_]*_){3}//' <<< 'Test_Test1_Test2_10082019_030013.csv.20191008-075740'
答案 1 :(得分:2)
请您尝试以下。
sed 's/\([^_]*\)_\([^_]*\)_\([^_]*\)_\(.*\)/\4/' Input_file
或者按照Bodo的好建议:
sed 's/[^_]*_[^_]*_[^_]_\(.*\)/\1/' Input_file
答案 2 :(得分:0)
这可能对您有用(GNU sed):
sed 's/_/\n/3;s/.*\n//;t;s/Test2/\n/;s/.*\n//;t;d' file
用换行符替换第三个_
,然后删除所有内容,包括第一个换行符。如果成功,请退出并打印结果。否则,请使用Test2
尝试相同的方法,如果失败,则删除整行。