考虑这个示例文件(行号仅供参考):
1 Reference duiarneutdigane uditraenturida enudtiar.
2
3 Reference uiae uiaetrtdnsu iatdne uiatrdenu diaren uidtae
4 on line 23.
5
6 uiae
7
8 uaiernd Reference uriadne udtiraeb unledut iaeru uilaedr
9 uiarnde line 234.
Run Code Online (Sandbox Code Playgroud)
我希望使用此 grep 命令(tst 是示例文件)匹配以“Reference”开头并以句点结尾的每个字符串(即 ll.1、3-4 和 8-9):
grep -P '(?s)Reference.*?\.' tst
但是,它只匹配第一行。我在想什么:
(?s)
, 所以.
匹配所有字符,包括换行符.*?
应该使星不贪婪,因此如果它以句点结尾,则它不匹配整个文件。\.
。我也试过 awk 和 grep 的-z
标志,但是我要么得到每一行,要么不是所有的行都与我的表达相匹配。
我正在尝试编写一个脚本——或者更准确地说是一个别名——它允许我移动文件并跟随 ( cd
) 它们到它们的目标目录。这个问题的公认答案建议使用以下代码:
mvf() { mv "$@" && goto "$_"; }
Run Code Online (Sandbox Code Playgroud)
wheregoto
只是一个更安全的变体,cd
并且$_
是传递给最后一个命令的最后一个参数。
我的派生实现是这样的:
alias mvaf="mv $@ && cd $_"
Run Code Online (Sandbox Code Playgroud)
请注意,我没有引用$@
是为了不尝试按所有参数的名称移动文件。我最初确实尝试过这个变体,但脚本也失败了。如果我用 调用上面的实现mvaf test1 test2 ..
,它会抛出(翻译):“mv:缺少文件操作数”
在调试时,我尝试不使用cd
,实际上alias mvaf="mv $@ "
,基本上只是重命名mv
,移动文件。
我现在想知道为什么mv
在我的第一个实现中缺少操作数,以及这可能是如何由&&
.