3

我在 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{contents of group} 替换它。有些东西是关闭的,因为它永远找不到我想要的。我正在努力使用文档和示例,我们将不胜感激建议和指导。

4

3 回答 3

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
于 2013-10-08T18:59:58.010 回答
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
于 2013-10-08T19:00:16.643 回答
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
于 2013-10-08T19:00:34.733 回答