我需要运行具有管理权限的命令。有人说我应该以 root 身份运行命令。我该怎么做呢?
是否有用于文本搜索 docx 文件的命令行工具?我试过grep
,但它不适用于 docx,即使它适用于 txt 和 xml 文件。我可以先将 docx 转换为 txt,但我更喜欢直接对 docx 文件进行操作的工具。我需要该工具在 Cygwin 下工作。
OP 编辑:后来我发现实现 grep 的最简单方法实际上是将这些 docx 转换为 txt 然后 grep 覆盖它们。
假设我进行了一次耗时的递归grep
搜索。看到结果后,我想要不同的输出;例如,我想-C 3
为 3 个上下文行添加选项。添加新选项后,我可以再次进行整个搜索,但我必须像以前一样等待。
有没有什么聪明的方法grep
可以更快地执行第二次搜索?
我目前在使用 grep 时面临“性能问题”。我试图在许多(想想 Linux 内核存储库大小)文件中找到许多(10,000+)个关键字的出现。目标是为每个关键字生成一种索引:
keyword: my_keyword
filepath 1
filepath 2
------
keyword: my_keyword2
...
Run Code Online (Sandbox Code Playgroud)
作为 shell 脚本的新手,我尝试了一些幼稚的方法:
while read LINE; do
echo "keyword: "$LINE >> $OUTPUT_FILE
grep -E -r --include='Makefile*' "($LINE)" . >> "$OUTPUT_FILE"
echo "-----"
done < $KEYWORD_FILE
Run Code Online (Sandbox Code Playgroud)
这需要大约 45 分钟才能完成,并获得预期的结果。
注意:我搜索的所有关键字都位于一个文件中(“KEYWORD_FILE”,因此在任何开始之前都是固定的),并且可以在搜索开始之前确定要搜索的文件。我试图在搜索之前存储要搜索的文件列表:
file_set=( $(find . -name "Kbuild*" -o -name "Makefile*") )
Run Code Online (Sandbox Code Playgroud)
然后将 grep 调用替换为
echo {$file_set[*]} | parallel -k -j+0 -n 1000 -m grep -H -l -w "\($LINE\)" >> "$OUTPUT_FILE"
Run Code Online (Sandbox Code Playgroud)
大约需要一个小时才能完成……
问题:考虑到我可以使用我想要的任何技术,只要它符合 sh 标准,如何“更快”和/或更有效地完成这项工作?
也许grep
不是使用的工具,我的使用parallel …