使用awk或sed更改路径

问题描述 投票:1回答:1

您好我想将符号链接路径更改为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

我有大文本文件,所以我想找到“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 awk sed grep echo
1个回答
1
投票

在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

注意事项:

  • quote your variables,每一次。
  • 不要使用ALLCAPS varnames,它将bite you eventually
  • 请注意,输出重定向已移至while循环的外部,就像输入重定向一样
  • IFS= read -r line是从文件中精确读取行的方法。

我不知道这是否会更快:bash可能会很慢,特别是对于大文件的while read循环。你可以尝试另一种语言:

perl -MCwd=abs_path -pe 's/^SF:\K(.*)/ abs_path($1) /e' total.info > new1.info
© www.soinside.com 2019 - 2024. All rights reserved.