我有一个命令,我希望在我的.bashrc中有一个函数。
从命令行
find . -name '*.pdf' -exec sh -c 'pdftotext {} - | grep --with-filename --label={} --color "string of words" ' \;
将在当前目录的任何pdf中找到“字符串”。
尽管一小时内最好的部分,我真的不能得到“字串”作为字符串变量 - 即。
eg="string of words"
find . -name '*.pdf' -exec sh -c 'pdftotext {} - | grep --with-filename --label={} --color $eg ' \;
这显然不起作用,但我尝试了"/'/\
与echo
黑客,阵列扩展的各种组合,但没有运气。我确信这是可能的,我确信这很容易,但我无法让它发挥作用。
答案 0 :(得分:0)
变量扩展之类的东西只能在双引号内工作,而不是单引号。您是否尝试过使用双引号?
像这样:
find . -name "*.pdf' -exec sh -c 'pdftotext {} - | grep --with-filename --label={} --color $eg " \;
答案 1 :(得分:0)
问题可能是'
命令周围的单引号pdftotext
。单引号将阻止它们发生的字符串中的任何变量扩展。双引号"
可能会更幸运。
eg="string of words"
find . -name '*.pdf' -exec sh -c "pdftotext {} - | grep --with-filename --label={} --color $eg " \;
答案 2 :(得分:0)
可能最简单:
find . -name '*.pdf' -exec \
sh -c 'pdftotext $0 - | grep --with-filename --label=$0 --color "$1"' {} "$eg" \;
答案 3 :(得分:0)
你需要装饰逻辑的方式与你所做的不同:
eg="string of words"
find . -name '*.pdf' -exec sh -c "pdftotext {} - | \
grep -H --label={} --color '$eg'" \;
即,通过使shell进程外部引号分隔符"
,shell变量扩展工作,并使用'
分隔搜索变量,将其保留为字符串。
答案 4 :(得分:0)
编写一个小型shell脚本mypdfgrep
并从find
调用
#/bin/bash
pdftotext "$1" - | grep --with-filename --label "$1" --color "$2"
然后运行
$ chmod +x mypdfgrep
$ find . -name '*.pdf' -execdir /full/path/to/mypdfgrep '{}' "string of words" \;