匹配字符串的一部分,并从由字符串组成的给定句子中键入完整的字符串

时间:2014-04-28 19:25:05

标签: regex string

我有一个文件list.txt,其中包含某些文件的路径,如:

Desktop/28_dec/script/sign_145/check/sig4n_120/mu_30 ;
Desktop/28_dec/run_1/run_12/sign_145/check/sig4n_120/mu_30 ;
Desktop/14_feb/eps_14/run14//sign_145/check/sig4n_120/mu_30 
Desktop/28_dec_2013/eps3_1200/eps_nano_20/sign_130/sign_145/check/sig4n_120/mu_30 

等等。这种模式非常随机。在每一行中,必须记下三列中完整路径中的三件事情;

  1. 字符串有' sig4n _'对于ex :: sig4n_130
  2. 字符串有'符号_'
  3. 字符串有' mu _',
  4. 我知道的一种方法是使用split命令,其中分隔符将是' /',然后比较字符串的一部分。我试着编写脚本,但我的脚本显示错误。 我在Linux中做了以下事情:

    z =Desktop/28_feb/eps3_1200/sign_200/sig4n_120/mu_10 ; 
    awk '{split($z,arr,"/")}' > data.dat 
    

    然后它显示错误" unexpected token '('" 。

    我也尝试过写作

    z='list.txt' ; 
    awk '{split($0,arr,"/")}' list.txt 
    

    感谢您回答我的问题。

1 个答案:

答案 0 :(得分:0)

还不太清楚你在做什么 - 你提供的代码毫无意义。

解决问题的简单方法是

sed -e 's/.*\(sign_...\).*\(sig4n_...\).*\(mu_..\).*$/\1 \2 \3/' list.txt 

输出(输入文件):

sign_145 sig4n_120 mu_30
sign_145 sig4n_120 mu_30
sign_145 sig4n_120 mu_30
sign_145 sig4n_120 mu_30

这假定所有三个项目(signsig4nmu)都存在并且格式化为一定数量的数字。你可以从这里弄明白。