这行 Linux shell 脚本起什么作用?

这行 Linux shell 脚本起什么作用?

我正在尝试确定以下这行 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.DAT9Kp9K 

1注意:单词, 不是线。这意味着带有空格的文件名将被视为多个名称。xargs -d'\n'会更好,尽管并不完美。

相关内容