2016-02-29 117 views
1

我目前有一堆md5sum散列值的.md5sum文件,它與完整的絕對路徑相對應的文件名。我想將這些文件從絕對路徑修改爲相對路徑。我想我已經非常接近了。sed搜索並替換字符串和最後一次發生的字符

> cat example.md5sum 
197f76c53d2918764cfa6463b7221dec /example/path/to/file/example.null 
> cat example.md5sum | sed 's/().*\// \.\//' 
197f76c53d2918764cfa6463b7221dec /example/path/to/file/example.null 

投擲正則表達式().*\/到記事本++返回/example/path/to/file/這就是我想要的。將其移至sed不會生成相同的匹配項。

如前所述這裏的最終目標是:

197f76c53d2918764cfa6463b7221dec ./example.null 
+0

必須在tcsh中完成此操作,還是打開POSIX shell解決方案? – ghoti

+0

我僅限於tcsh – DuckCowMooQuack

回答

2

看起來像一個工作,sed的。

sed -i.bak 's:/.*/:./:' file ... 

-i選項告訴sed修改文件「就地」,而不是將結果發送到標準輸出。使用s ubstitute命令,您可以使用備用分隔符 - 在這種情況下,我使用了冒號,因爲您正在匹配並用作替換的文本包含斜槓。使事情更容易閱讀。

我沒有打擾的路徑之前的空格匹配,因爲在文件的md5sum具有相當可預測的格式。

在試驗之前備份您的輸入文件。

注意,這是貝無關 - 你可以的tcsh或bash或其他任何能夠啓動與選項的sed運行它。

+0

謝謝ghoti。最終解決方案: 'find。 -type f -name「* .md5sum」-print0 | xargs -0 sed -i.bak's:/.*/:./:'' – DuckCowMooQuack

+0

@DuckCowMooQuack - 也可以考慮使用find的'-exec'選項,這樣就不需要通過xargs管道了。例如:'find/path -type f -name \ *。md5sum -exec sed -i.bak':/.*/:./:'{} +' – ghoti

+0

@ghoti'-exec'如何處理空格在文件名? – DuckCowMooQuack