Bash 打印/提取changelog.md特定部分,使代码不区分大小写
到现在为止,我一直在写Bash 打印/提取changelog.md特定部分,使代码不区分大小写,bash,shell,awk,changelog,Bash,Shell,Awk,Changelog,到现在为止,我一直在写 awk 's{ print ""; print}; $0~v {print; s=1; next}; s=0' RS= v=4.0.74 Chnagelog.md 这真是太棒了,但现在我有点怀疑。如果我想使用不区分大小写的文件名。假设不是用小写形式给出文件名,而是用大写或小写形式编写文件名,那么该脚本将无法工作。 如何修改此awk脚本以采用不区分大小写的文件名?大多数操作系统都会区分大小写处理文件名以及文件名之间的差异 被视为不同的文件。如果您对此有
awk 's{ print ""; print}; $0~v {print; s=1; next}; s=0' RS= v=4.0.74 Chnagelog.md
这真是太棒了,但现在我有点怀疑。如果我想使用不区分大小写的文件名。假设不是用小写形式给出文件名,而是用大写或小写形式编写文件名,那么该脚本将无法工作。
如何修改此awk脚本以采用不区分大小写的文件名?大多数操作系统都会区分大小写处理文件名以及文件名之间的差异 被视为不同的文件。如果您对此有把握,请尝试与
bash
组合使用:
#!/bin/bash
for f in *.md; do
if [[ ${f,,} = "changelog.md" ]]; then
awk 's{ print ""; print}; $0~v {print; s=1; next}; s=0' RS= v=4.0.74 "$f"
fi
done
我认为更好的解决方案是修复文件名。另一种方法是在awk中使用grep-I:
awk -v v="4.0.74" '{
while ("ls *.md | grep -i chnagelog.md" | getline fil) { # Run the ls/grep command, reading each result into the variable fil
while (getline var1 < fil) { # Read each line of fil into the variable var1
# Run initial awk code, processing var1 for $0
if (var1 ~ v) {
print var1
}
else {
print "";
print var1
}
}
close(fil) # Close the opened file
}
close("ls *.md | grep -i chnagelog") # Close the open pipe
}' <<< /dev/null
awk-v=“4.0.74”{code>
而(“ls*.md | grep-i chnagelog.md”| getline fil){运行ls/grep命令,将每个结果读入变量fil
而(getline var1Chnagelog.md
,或者可能有多个文件要传递给awk
?我只需要传递一个文件,对于*.md中的f;做语法错误:无效语法确实要使用bash
执行脚本吗?是。您知道如何在python中导入shell脚本文件吗。基本上是如何导入的。如果您使用的是bash,我不知道它为什么会导致您提到的错误。*.md中f的语法;做done
自非常旧的bash
包括sh
以来一直受支持。顺便问一下,您正在使用哪个操作系统?在-v v=“1.0.12”处获取无效语法您正在运行哪个版本的awk(awk-v)您是什么操作系统?你在用bash吗?我现在在用windows。IDE:-了解giblab的变化并查看管道中的输出