小编spe*_*ong的帖子

如何查找包含字符串的行,然后打印这些特定行和其他内容

我使用以下命令递归搜索多个文件,并在找到该字符串的每个文件中查找行号。

    grep -nr "the_string" /media/slowly/DATA/lots_of_files > output.txt
Run Code Online (Sandbox Code Playgroud)

输出如下:

    /media/slowly/DATA/lots_of_files/lots_of_files/file_3.txt:3:the_string
    /media/slowly/DATA/lots_of_files/lots_of_files/file_7.txt:6:the_string is in this sentence.
    /media/slowly/DATA/lots_of_files/lots_of_files/file_7.txt:9:the_string is in this sentence too.
Run Code Online (Sandbox Code Playgroud)

如上所示,输出包括文件名、行号和该行中的所有文本,包括字符串。

我还想出了如何使用以下命令仅打印包含字符串的文件的特定行:

    sed '3!d' /media/slowly/DATA/lots_of_files/lots_of_files/file_3.txt > print.txt
    sed '6!d' /media/slowly/DATA/lots_of_files/lots_of_files/file_7.txt >> print.txt
    sed '9!d' /media/slowly/DATA/lots_of_files/lots_of_files/file_7.txt >> print.txt
Run Code Online (Sandbox Code Playgroud)

我通过读取行​​号和文件名手动创建了上述命令

这是我的问题。

Q1a

有没有办法将两个步骤合并为一个命令?我正在考虑将行号和文件名输入 sed 并打印该行。我对生成 grep 输出的顺序有问题。

Q1b

与上面相同,但还要打印包含字符串的行之前的 2 行和之后的 2 行(共 5 行)?我正在考虑将行号和文件名输入 sed 并以某种方式打印所有必需的行。

十分感谢。

command-line grep sed

18
推荐指数
2
解决办法
19万
查看次数

如何在另一个脚本中停止一个脚本

我正在使用终端模拟器运行 Ubuntu 16.04。

我有两个脚本:a.shb.sh.? a.sh调用b.sh

a.sh

echo "a is running"
sleep 5s
bash b.sh
sleep 5s
echo "a is still running"
Run Code Online (Sandbox Code Playgroud)

b.sh

echo "b is now running"
sleep 1000s
echo "Bananas"
Run Code Online (Sandbox Code Playgroud)

有没有办法运行a.shb.sh在它完成之前停止(在它打印香蕉之前)并让a.sh运行完成并打印“a仍在运行”?

我试图把pkill -f b.sh里面a.sh,但两者a.shb.sh停止前a.sh完成。

kill shell-script pkill

5
推荐指数
2
解决办法
4172
查看次数

如何删除包含三个重复字段的文本文件中的行(字符串按空格分隔)

我有一个长文本文件如下(从下载链接和下载的文件名生成):

file01 48976 5873987 48976 48976 thdshiesde
file02 29876 589845637 29876 29876 uyjedrty 54
file03 38745 58934 99432 38745 hytug 48
Run Code Online (Sandbox Code Playgroud)

等等。

我想删除重复字段 2、4 和 5 的行。

从上面的例子我想生产:

file03 38745 58934 99432 38745 hytug 48
Run Code Online (Sandbox Code Playgroud)

等等。

(前两行包含删除所需的必要重复字段,而第三行不包含,因此保留。)

有什么建议?

duplicate text-processing

0
推荐指数
1
解决办法
45
查看次数