我在名为 的文件中有以下行ref.list
。
234 ./XYZ_SiteMetric_TIMESTAMP.dat
456 ./XYZ_Site_TIMESTAMP.dat
我需要让它们:
234 SiteMetric
456 Site
我在脚本中使用以下命令:
sed -i 's/\*SiteMetric\*/SiteMetric/g' ref.list
sed -i 's/\*Site\*/Site/g' ref.list
列表文件中有很多类似的行。
当我使用 运行脚本时sh -x
,没有错误并且命令正在执行。但文件中没有任何变化。
注意:XYZ_
两行中的部分始终相同。但timestamp
部分不同。
答案1
任意数量字符的语法是.*
。*
仅表示前一个字符或表达式的任意数量的匹配。也就是说,.*
表示 的任意数量的匹配项.
,可匹配任意字符。
答案2
更短的解决方案怎么样:
sed -ri -e 's%[.]/XYZ_(.*)_TIMESTAMP.dat%\1%' ref.list
它假设所有输入都遵循该模式。
答案3
假设您在 Site / SiteMetric 中没有_
字符(不确定它是否是变量)并且模式是静态的,您可以这样做:
sed 's/\.[^_]*_//;s/_.*//;'
第一部分s
将删除./XYZ_
部分,第二部分将删除_TIMESTAMP.dat
部分。