Grep键值对,其中键名称等于值名称

时间:2018-02-05 09:20:05

标签: grep

我正在寻找一种方法来查找键值对,其中键名称等于值名称,使用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])' \{\} +

1 个答案:

答案 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>