我有一个grep
处理字符串的命令
test-test test
我希望该命令仅向我显示突出显示的“独立”一词test
,而不是test-test
.
然而,当我跑步时
echo "test-test test" | grep -w "test"
我test
突出显示了所有发生的情况。
是否可以将匹配限制为仅孤立出现test
?
我有一个grep
处理字符串的命令
test-test test
我希望该命令仅向我显示突出显示的“独立”一词test
,而不是test-test
.
然而,当我跑步时
echo "test-test test" | grep -w "test"
我test
突出显示了所有发生的情况。
是否可以将匹配限制为仅孤立出现test
?
我有一棵树。
.
├── 1
│ └── a
│ └── script.a.sh
├── 2
│ └── a
│ └── script.b.sh
...
└── a
└── script.sh
我需要找到script.*.sh
。我执行./a/script.sh
:
#!/bin/bash
#
path="/tmp/test"
readarray files < <(find ${path} -path "*/a/script.*.sh")
if [ ${#files[@]} -ne 0 ]
then
for file in "${files[@]}"
do
echo ${file}
done
fi
输出:
/tmp/test/1/a/script.a.sh
/tmp/test/2/a/script.b.sh
这是有效的脚本!
但如果我将 find 命令更改为find ${path} -path "*/a" -name "script.*.sh"
脚本,则不会输出任何内容。
我的逻辑找到所有具有/tmp/test/*/a/script.*.sh
我所说的模式的文件find ${path} -path "*/a" -name "script.*.sh"
。
我目前剩下的问题是:
find ${path} -path "*/a" -name "script.*.sh"
命令实际上是做什么的?find
?我的意思是它如何理解我对它说的话(例如:它将搜索的路径,没有find . -name "*te.st*"
,只是./*/*te.st*
)。-name
,可以-path
在同一个命令行上(需要案例、示例、解释)还是相互排斥?或者我们可以说-path
扩展版本-name
吗?伙计们,是的,我可以使用man
和google
。在这些来源中,我也没有找到所有问题的完整答案。
为什么这个脚本有效?
str=( -name "*.conf" -o -name "test test" )
find ./ \( "${str[@]}" \)
这个脚本不起作用?
str[0]="-name"
str[1]="\"*.conf\""
str[2]="-o"
str[3]="-name"
str[4]="\"test test\""
find ./ \( "${str[@]}" \)
这里看起来像错误:str[1]="\"*.conf\""
我对第二种情况感兴趣。
我经常使用表达式line=${line//[$'\r\n']}
。但这是什么[$'\r\n']
意思?
我知道它会删除'\r\n'
字符,但它是如何做到的?它是只删除两个字符的实例,还是只找到一个字符的匹配项?
我不明白这种语法的用法。
如果可以的话,请给我一个手册的链接。我找不到这个问题的答案。