2013-10-08 56 views
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 {組的內容}替換它。 有些東西是關閉的,因爲它從來沒有找到我想要的東西。我正在努力處理文檔和示例,我們將非常感謝您的建議和指導。

+0

回想一下,註冊專家中的'*'表示前面的exprer(在您的案例[:alnum:]中)爲零或更多。要匹配至少一個你的專家,你需要像'[:alnum:] [:alnum:] *'一樣複製以保證匹配至少一個'[:alnum:]'。我很確定這不能解決你的問題,但是當你對'我的使命'感興趣時,我很樂意爲你做出澄清。祝你好運。 – shellter

回答

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

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 
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 

EDIT

sudo_O建議在,捕獲基團可以被丟棄,並且&可以在同一命令中使用。

sed -r 's/\\\w+\.asmx/\\App_Code&/' files.txt 
相關問題