Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将这两个“sed”命令压缩为一个?_Sed - Fatal编程技术网

如何将这两个“sed”命令压缩为一个?

如何将这两个“sed”命令压缩为一个?,sed,Sed,更令人好奇的是,有没有办法将这两个sed命令压缩为一个 sed -r '/sometext/!d' file.txt | sed -r '5,10!d' 上面给出了包含“sometext”的行的第5到第10个实例(总共6个) 连接: sed -r '/sometext/!d;5,10!d' file.txt 仅提供原始文件第5至第10行中出现“sometext”的行。这可能适用于您: # make some test data # seq 50 > /tmp/a sed -i 's/.

更令人好奇的是,有没有办法将这两个sed命令压缩为一个

sed -r '/sometext/!d' file.txt | sed -r '5,10!d'
上面给出了包含“sometext”的行的第5到第10个实例(总共6个)

连接:

sed -r '/sometext/!d;5,10!d' file.txt

仅提供原始文件第5至第10行中出现“sometext”的行。

这可能适用于您:

# make some test data
# seq 50 > /tmp/a
sed -i 's/.*/& sometext/;n' /tmp/a
# run existing commands
sed -r '/sometext/!d' /tmp/a | sed -r '5,10!d'
sometext
9 sometext
11 sometext
13 sometext
15 sometext
17 sometext
19 sometext
# run new command
sed '/sometext/H;$!d;g;s/\n/&&/5;s/.*\n\n//;s/\n/&&/6;s/\n\n.*//' /tmp/a
9 sometext
11 sometext
13 sometext
15 sometext
17 sometext
19 sometext
说明:

  • 将感兴趣的线推入保持空间(HS)<代码>/sometext/H
  • 删除除最后一行以外的所有其他行<代码>$!d
  • 用HS的内容覆盖最后一行<代码>g
  • 删除前5行。注意:第一个换行符是来自
    H
    命令的工件<代码>s/\n/&&/5;s/*\n\n/
  • 删除除前6行以外的所有行<代码>s/\n/&&/6;s/\n\n.*/'

注意:<代码>5,10!d命令意味着删除除第5行到第10行以外的所有行

这可能适用于您:

# make some test data
# seq 50 > /tmp/a
sed -i 's/.*/& sometext/;n' /tmp/a
# run existing commands
sed -r '/sometext/!d' /tmp/a | sed -r '5,10!d'
sometext
9 sometext
11 sometext
13 sometext
15 sometext
17 sometext
19 sometext
# run new command
sed '/sometext/H;$!d;g;s/\n/&&/5;s/.*\n\n//;s/\n/&&/6;s/\n\n.*//' /tmp/a
9 sometext
11 sometext
13 sometext
15 sometext
17 sometext
19 sometext
说明:

  • 将感兴趣的线推入保持空间(HS)<代码>/sometext/H
  • 删除除最后一行以外的所有其他行<代码>$!d
  • 用HS的内容覆盖最后一行<代码>g
  • 删除前5行。注意:第一个换行符是来自
    H
    命令的工件<代码>s/\n/&&/5;s/*\n\n/
  • 删除除前6行以外的所有行<代码>s/\n/&&/6;s/\n\n.*/'

注意:<代码>5,10!d命令意味着删除除第5行到第10行以外的所有行

不是sed,但是awk非常可读:

awk '/sometext/ && ++count && 5 <= count && count <= 10' file.txt

awk'/sometext/&&++count&&5不是sed,但awk可读性很强:

awk '/sometext/ && ++count && 5 <= count && count <= 10' file.txt

awk'/sometext/&&++count&&5你能提供一个输入/输出示例吗?你能提供一个输入/输出示例吗?我在你的sed fu面前鞠躬;但是我想我会坚持使用管道来提高脚本的可读性!我向你鞠躬;但是我想我会坚持使用管道来提高脚本的可读性!