我正在尝试确定以下这行 shell 脚本到底在做什么:
grep --files-with-matches '>' . | sort | uniq | xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT
我很确定它正在尝试对“9Kp”进行全局搜索并在指定的数据文件中将其替换为“9K”,但我不清楚在此之前 grep 命令在做什么。
答案1
grep --files-with-matches '>' .
>
在当前目录中搜索( .
)并仅打印匹配文件的文件名(--files-with-matches
)。
请注意grep
不会返回任何事物如果你给它一个目录(.
)但忘记启用“递归”模式。正确的命令应该是
grep --files-with-matches --recursive '>' .
或者简单地
grep -Rl '>' .
| sort
| uniq
对结果进行排序,并删除重复项。
| xargs perl -pi~ -e 's/9Kp/9K /' /home/user/DATAFILE.DAT
运行给定的命令 ( perl ...
),并将 stdin 中的每个单词1作为附加参数传递。
通过将文本“ ”替换为“ ”,可以更新结果中的每个文件grep
以及文件。旧文件使用尾随波浪符号进行备份。/home/user/DATAFILE.DAT
9Kp
9K
1注意:单词, 不是线。这意味着带有空格的文件名将被视为多个名称。xargs -d'\n'
会更好,尽管并不完美。