我在运行我的简单 shell 脚本时遇到问题,我在其中使用 while 循环读取文本文件并尝试使用匹配的正则表达式检查条件:
#!/bin/sh
regex="^sometext"
cat input.txt |
{
while read string
do if [[ $string ~= $regex ]]; then
echo "$string" | awk '{print $1}' >> output.txt
else
echo "$string" >> outfile.txt
fi
done
}
但我只收到类似
的错误[[: not found
你能告诉我吗?
最佳答案
[[ expr ]]
是 bash 主义; sh 没有。
如果您想使用该语法,请使用 #!/bin/bash
。
也就是说,为什么要使用 shell 脚本?
Awk 已经可以做你在这里做的一切——你只需要利用 Awk 的内置正则表达式匹配和每行有多个操作的能力:
您的原始脚本可以简化为此命令:
awk '/^sometext/ {print $1; next} {print}' input.txt >> output.txt
如果模式匹配,Awk 将运行第一个 {}
block ,它执行 print $1
,然后强制 Awk 移动到下一行。否则,它将继续到第二个 {}
block ,它只打印该行。
关于regex - 检查 while 循环(shell)内的正则表达式条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19689927/