我正在尝试使用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
答案 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