如果行以.txt文件中的反斜杠开头,请执行此操作

时间:2018-04-01 20:07:39

标签: bash macos if-statement sed

我正在尝试使用if语句在bash中处理文本文件中以\开头的行。

这样的事情:

shasum -a 256 file_A\\\\\/\/.txt >> file_B.txt
if line begins with '\' in file_B.txt
    then sed 's/^/^.{65}  /; s/$/$/' that line in file_C.txt
else
    if line not begin with '\' in file_B.txt
        then sed 's/^/^.{64}  /; s/$/$/' that line in file_C.txt
    fi
fi

file_B.txt的内容:

e5fba57b49dbe8196ee4fb4ddb407885582f88d8e52dfa6e5adb55204b589a88  /Users/1337/file_D.txt
\66590f18dafff57160770d885b090d54455e0fc900342d7752dc420405ae50f5  /Users/1337/file_A\\\\::.txt

file_C.txt的内容:

/Users/1337/file_D.txt
/Users/1337/file_A\\::.txt

所以,基本上,最终结果看起来像这样(这是在file_C.txt中):

^.{64}  /Users/1337/file_D.txt$
^.{65}  /Users/1337/file_A\\::.txt$

因为第2行以\开头而第1行没有。

如果其中任何一个令人困惑,请不要犹豫让我澄清。

Mac OS X Yosemite,bash 3.2.57(1)-release

2 个答案:

答案 0 :(得分:1)

这样的东西?

while read -r line; do
    n=64; [ ${line:0:1} == \\ ] && n=65
    echo "^.{$n}  ${line#*  }\$"
done <file_B.txt >file_C.txt

答案 1 :(得分:1)

使用sed

sed -E 's/(\\?)([^ ]*)(.*)/\^.64\1\3$/;s/4\\/5/' file_B.txt

在第一个s命令中

(\\?)([^ ]*)(.*)/

每一行分为3组 第一个&#39; \&#39;是选项。
第二个是您不需要的十六进制数据 第三个是伪路径

/\^.64\1\3$/ 

每行都附加^ .64
第一组和第三组保持
每行都以$

开头

在第二个s命令中

s/4\\/5/

4 \替代5