捕获具有awk的行范围,多行记录不起作用

捕获具有awk的行范围,多行记录不起作用,awk,Awk,我试图理解为什么在调用RS=和ORS=选项时不能使用awk。有更好的方法吗 这项工作: awk '/password =[[:space:]]*$/' ./test awk '/password = *$/' ./test 但我需要这个来工作: awk -v RS= -v ORS='\n\n' '/password = *$/' ./test 示例文件/测试: User_Mike1: password = 12345678

我试图理解为什么在调用RS=和ORS=选项时不能使用awk。有更好的方法吗

这项工作:

    awk '/password =[[:space:]]*$/' ./test
    awk '/password =  *$/' ./test
但我需要这个来工作:

    awk -v RS= -v ORS='\n\n' '/password = *$/' ./test
示例文件/测试:

    User_Mike1:
           password = 12345678
           somedata = whatever

    User_Mike2:
           password = 12345678
           somedata = whatever

    User_Mike3:
           password = 
           somedata = whatever

    User_Mike4:
           password = 12345678
           somedata = whatever
所需输出包含“password=”的记录,即空密码条目:

    User_Mike3:
           password = 
           somedata = whatever
我还需要password=*或password=*的行。这件事让我抓狂

编辑:答案

我认为我的问题在于文件本身,我手动添加了新行,脚本工作正常

在我的情况下,我希望记录的密码=*password=*password=或login=false:

    awk -v RS= -v ORS='\n' '/password = [*]/ || /password =[*]/ || /login = false/ || /password = \n/'
当你使用RS=newline时,它不再是你记录的结尾。因此,模式中的美元与您期望的不匹配

请尝试awk-v RS=-v ORS='\n\n'/密码=*\n/'./测试

或者继续使用$try:awk-vfs='\n'-vrs=-vrs='\n\n'$2~/=*$/'./测试下一个perl

perl -00 -lanE 'say "$_\n" if m/password\s*=\s*\*?\s*\n/' <<EOF
    User_Mike1:
           password = 12345678
           somedata = whatever

    User_Mike2:
           password = *
           somedata = whatever

    User_Mike3:
           password = 
           somedata = whatever

    User_Mike4:
           password = 12345678
           somedata = whatever
EOF

+1美元意味着线的尽头,这是一个常见的误解。它不是,它的意思是结束字符串。我想这就是OP的概念问题。像sed、grep和awk这样带有默认RS的工具将它们的输入分离成字符串,以便一次处理一行,因此在这种情况下,字符串的结尾、记录的结尾和行的结尾都是一样的,$。只有在awk中不使用默认RS时,差异才会变得明显。$仍然表示字符串结束和记录结束,但现在这与行结束不同,它是\n.awk-v RS=-v ORS='\n''/password=[]/| |/password=[]/| |/login=false/| |/password=\n/'对我有效。。。我认为问题在于我手动添加到文件中的换行符。“/password=|?\*.*\n/”可能会满足您对所有密码行的要求。实际文件没有您的示例代码段所具有的换行符?感谢您发布此信息。我不想开始添加perl,但我已经接近完成了。再次感谢。
    User_Mike2:
           password = *
           somedata = whatever

    User_Mike3:
           password = 
           somedata = whatever