Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 打印/提取changelog.md特定部分,使代码不区分大小写_Bash_Shell_Awk_Changelog - Fatal编程技术网

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 var1}'能否请您确认您所说的是否只有一个文件
Chnagelog.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的变化并查看管道中的输出