簡體   English   中英

了解sed命令

[英]Understanding the sed command

我正在嘗試更改父目錄中包含的所有文件中的第一行,以便它們繼承其所在目錄的路徑名。例如,我有一個格式為:

2000-01-18
星期二
利文斯頓
42178

該特定文件位於名為18的目錄中,位於名為01的另一個目錄中,該目錄位於名為2000的另一個目錄中,該目錄名為filesToSort。

我設法將以下代碼用作控制台命令來更改文件的第一行:

perl -pi -w -e 's/2000-01-18/Test/g;' ff_1177818640

這將文件更改為

測試
星期二
利文斯頓
42178

我是否可以在此命令中更改“日期”以選擇所有日期,所以我嘗試使用它:

perl -pi -w -e 's/*/Test/g;' ff_1177818640

但這一點都不喜歡。
我目前的處理過程是,如果我可以使此命令選擇初始輸入中的所有日期,那么一些方法將找到一種方法來實現到第二部分的路徑名,在第二部分中,我目前使用以下方法進行“測試”:

path=/filesToSort/2000/01/18/ff_1177818640
file=$(basename "$path")

從理論上講,我應該能夠通過父目錄和所有子目錄運行整個代碼,因此可以更改這些目錄中文件的每個日期值(該文件出現在每個文件的第1行),以反映它們的文件路徑重新輸入,有效地打開一個看起來像這樣的文件:

2000-xx-18
星期二
利文斯頓
42178

包含在目錄/ filesToSort / 2000/01/18中:

2000/01/18
星期二
利文斯頓
42178

我不確定我是否在這里錯誤地使用了sed命令,是否應該使用另一個命令來代替,但是我一直在嘗試使它工作4個小時,而我似乎無法給辦了。 先謝謝您的幫助!

在我看來,您要做的基本上是將“-”轉換為“ /”。 您可以找到文件,對其進行備份(總是一個好主意),然后使用:

    sed 's|-|/|g' <path/backup_file >path/modified_file

也就是說,如果分配相同,則可以使用該命令將其復制到新目錄並同時修改文件。

您尚未發布sed命令,因此很難知道它將起作用。 讓我們一步步來做。 嘗試這個:

sed -i '1s/^/X/' ff_1177818640

並查看是否修改了該文件(在第一行的開頭添加“ X”)。 如果您的sed版本不滿意,請嘗試以下操作:

sed -i "" '1s/^/X/' ff_1177818640

一旦語法生效,我們必須解決將路徑轉換為日期的問題。 嘗試這個:

echo some/path/filesToSort/2000/01/18/ff_1177818640 | sed 's|.*/filesToSort/||; s|/[^/]*$||'

如果產生“ 2000/01/18”,請發表評論,我們可以將其放在一起。

編輯:將它們放在一起。 胡言亂語!

find . -type f -exec sed -i "1{s|.*|{}|;s|.*/filesToSort/||;s|/[^/]*$||;}" {} \;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM