我正在寻找一种方法来查找键值对,其中键名称等于值名称,使用find和grep或Linux中可用的等效命令行工具,例如:
find . -type f -exec grep ... {} +
匹配(以及其他):
<video autoplay=autoplay loop=loop muted=muted playsinline=playsinline>
背景
我在网站上使用harpjs。不幸的是,像下面这样的玉代码被编译成带有键值对的html代码,其中键名等于值名。这会导致问题,例如,在iOS Safari中,控件显示在html5背景视频中。
video(autoplay, loop, muted, playsinline)
更新
我决定通过分析jade代码而不是编译的html代码来另外解决问题。 AFAIK,以下命令涵盖了jade代码可能导致值属性等于属性名称的html属性的所有情况:
# matches "(autoplay, "
find harp/public -type f -iname "*.jade" -exec grep --color '([a-zA-Z]*, ' \{\} +
# matches ", loop,"
find harp/public -type f -iname "*.jade" -exec grep --color ', [a-zA-Z]*,' \{\} +
# matches ", playsinline)"
find harp/public -type f -iname "*.jade" -exec grep --color ', [a-zA-Z]*)' \{\} +
# matches "(loop)"
find harp/public -type f -iname "*.jade" -exec grep --color '([a-zA-Z])' \{\} +
答案 0 :(得分:0)
如上所述,您没有为测试用例提供足够的示例。但是,我试图根据您提供的一个测试用例提供有用的解决方案。
以下'grep'命令查找包含非空格的子字符串,非“&lt;” “&gt;” 中字符。然后将grep的输出传送到awk,将该结果拆分为由字符“=”分隔的一对字符串。最后,awk命令然后测试“=”两侧的每个字符串是否相同,如果是,则打印出结果:
grep -o '[^ |<]*=[^ |^>]*' test.txt | awk '{{split($0,a,"=")}; if (a[1] == a[2]) {print a[1];} }'
使用测试用例'test.txt':
<video autoplay=autoplay loop=loop muted=muted playsinline=playsinline>