我有一个文件
xyz... rsync: "/home/path/to/file": Permission denied (13) rsync:
"/home/path/to/file1": Permission denied (13) rsync:
"/home/path/to/file2": Permission denied (13) rsync:
"/home/path/to/file3": Permission denied (13)
Run Code Online (Sandbox Code Playgroud)
现在我只想提取文件路径并将其存储到另一个文件中。输出文件是这样的:
/home/path/to/file
/home/path/to/file1
/home/path/to/file2
/home/path/to/file3
Run Code Online (Sandbox Code Playgroud)
使用 sed 或 awk 我该怎么做?
我试过了,sed -n '/"/,/"/p' myfile
但它不工作。
小智 20
您可以将 rsync 命令的 stderr 通过管道传输到 awk 脚本:
awk -F '"' '{print $2}'
Run Code Online (Sandbox Code Playgroud)
或者像这样的剪切命令:
cut -d'"' -f2
Run Code Online (Sandbox Code Playgroud)
使用sed
:
sed 's/^[^"]*"\([^"]*\)".*/\1/'
Run Code Online (Sandbox Code Playgroud)
查找:行首、一系列非引号、双引号、捕获一系列非引号、双引号和该行上的任何其他内容,并用捕获的材料替换它。
$ sed 's/^[^"]*"\([^"]*\)".*/\1/' <<'EOF'
> xyz... rsync: "/home/path/to/file": Permission denied (13) rsync:
> "/home/path/to/file1": Permission denied (13) rsync:
> "/home/path/to/file2": Permission denied (13) rsync:
> "/home/path/to/file3": Permission denied (13)
> EOF
/home/path/to/file
/home/path/to/file1
/home/path/to/file2
/home/path/to/file3
$
Run Code Online (Sandbox Code Playgroud)
在带有 GNU 的 RHEL 5 Linux 上进行测试sed
,但仅使用在第 7 版 UNIX™ 版本的sed
.
顺便说一下,一个稍微简单的方法是使用两个替代命令;将包括第一个双引号在内的所有内容更改为空字符串(这是零个或多个非引号后跟双引号的序列);将现在第一个双引号之后的所有内容更改为空:
sed 's/^[^"]*"//; s/".*//'
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您尝试的命令 (`sed -n '/"/,/"/p') 从包含双引号的一行打印到包含双引号的下一行,根本不编辑这些行。这就是为什么它似乎对你不起作用——它做了你要求的,但你要求它做的并不是你想要它做的。
在效率方面,性能不太可能存在可测量的差异。在易于维护方面,我怀疑后者对脑细胞的负担较小。
归档时间: |
|
查看次数: |
45085 次 |
最近记录: |