在作为路径列表的文本文件中,在具有特定扩展名的文件之前插入目录

时间:2013-10-08 18:54:04

标签: replace sed awk

我在files.txt中有一个文件列表,这是一个非常简化的例子

$FOO%foo\bar\biz.asmx
%FOO%foo\bar\biz.cs
%FOO%baz\bar\foo\biz.asmx

我希望在App_Code文件的路径中插入.asmx,如:

$FOO%foo\bar\App_code\biz.asmx
%FOO%foo\bar\biz.cs
%FOO%baz\bar\foo\App_Code\biz.asmx

虽然我在一个Windows框上,但我有gnuwin32,它给了我sed / awk / grep和其他花哨的东西。

我没有坚持一个特定的解决方案,但我对启蒙运动的sed / awk路线感兴趣

我试过了: sed "s/\\([:alnum:]*)\.asmx/App_Code\/{1}/" 我原本以为会在.asmx之后的路径分隔符(文件名)之后捕获任何字母数字字符,然后将其替换为`App_Code {group of group}。 因为它永远找不到我想要的东西所以有些东西是关闭的我对这些文档和示例很感兴趣,建议和指导将不胜感激。

3 个答案:

答案 0 :(得分:2)

在Windows上引用是一件很痛苦的事情,因此请将以下脚本放入名为appcode.awk的文件中:

BEGIN {
    FS=OFS="\\"
}
$NF~/[.]asmx/{
    $NF = "App_code" OFS $NF
}
{
    print
}

运行如下:

$ awk -f appcode.awk file
$FOO%foo\bar\App_code\biz.asmx
%FOO%foo\bar\biz.cs
%FOO%baz\bar\foo\App_code\biz.asmx

答案 1 :(得分:1)

使用awk

awk -F\\ '/\.asmx/ {$NF="App_Code\\"$NF}1' OFS=\\ file
$FOO%foo\bar\App_Code\biz.asmx
%FOO%foo\bar\biz.cs
%FOO%baz\bar\foo\App_Code\biz.asmx

答案 2 :(得分:1)

使用sed

sed -r 's/(\\\w+\.asmx)/\\App_Code\1/' files.txt

输出:

$FOO%foo\bar\App_Code\biz.asmx
%FOO%foo\bar\biz.cs
%FOO%baz\bar\foo\App_Code\biz.asmx

修改

根据sudo_O的建议,可以删除捕获组,并且可以在同一命令中使用&

sed -r 's/\\\w+\.asmx/\\App_Code&/' files.txt