簡體   English   中英

使用 awk 或 sed 更改路徑

[英]Change path using awk or sed

您好,我想將符號鏈接路徑更改為 txt 文件中的真實路徑。 首先,我找到單詞“SF:”並更改路徑。 現在我使用這個腳本但是它很慢而且沒有效果。 我認為它可以通過 awk 或 sed 命令進行更改。 先感謝您。

#!/bin/bash
FILENAME="new1.info"
    echo "" > $FILENAME
while read LINE
do
if [ "" != "$(echo $LINE | grep -e "^SF:")" ]
then
    echo "SF:""$(realpath $(echo $LINE | cut -d":" -f2))" >> $FILENAME
else
    echo $LINE >> $FILENAME
fi
done < total.info

我有一個很大的 txt 文件,所以我想找到“SF:”並從這樣的內容更改行:

SF:/home/ects/svn/moduleTests/ctest/tests/moduletests/base/tmp/src/base64.cpp

對此:

SF:/home/ects/svn/moduleTests/ctest/src/base/base64.cpp

在 bash 中,我會寫

#!/bin/bash
while IFS= read -r line; do
    if [[ "$line" == "SF:"* ]]; then
        line="SF:$(realpath "${line#SF:}")"
    fi
    echo "$line"
done < total.info > new1.info

注意事項:

  • 每次都引用您的變量
  • 不要使用 ALLCAPS varnames,它最終咬你
  • 請注意,輸出重定向已移至 while 循環的外部,就像輸入重定向一樣
  • IFS= read -r line是從文件中准確讀取行的方法。

我不知道這是否會更快:bash 可能會很慢,特別是對於大文件的while read循環。 你可以嘗試另一種語言:

perl -MCwd=abs_path -pe 's/^SF:\K(.*)/ abs_path($1) /e' total.info > new1.info

暫無
暫無

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

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