【问题标题】:how can I use sed to delete second line?如何使用 sed 删除第二行?
【发布时间】:2016-11-24 18:53:32
【问题描述】:

我有一个文本文件3.txt,内容是这样的

123.ooo
aaaa - bbbb ccccc, dddd dddd, eeee fff (hhhhh ii jjj) 890a fff rrr 98.jjjj.1234
444.kkk

将 3.txt 读入数组 VAR

#!/bin/bash
VAR=$(cat /tmp/3.txt)
LEN=${#VAR[@]}
for (( i=0; i<${LEN}; i++ ));
do
  echo ${VAR[$i]}
  sed -i -e "#"${VAR[$i]}"#d" /tmp/3.txt
  cat /tmp/3.txt
done

我想echo 123.ooo 然后删除/tmp/3.txt 中的123.ooo 行 然后echo aaaa - bbbb ccccc, dddd dddd, eeee fff (hhhhh ii jjj) 890a fff rrr 98.jjjj.1234 并删除/tmp/3.txt 中的这一行 但是第二行有空间,如何使用 sed 删除第二行?

对不起,我的英语很差。 我想echo 第一行,然后删除文件中的第一行。 echo 第二行,然后删除文件中的第二行。 echo第三行,然后删除文件中的第三行。

【问题讨论】:

  • 您的实际需求是什么?删除文件中包含模式123.oooaaaa - bbbb ccccc, dddd dddd, eeee fff (hhhhh ii jjj) 890a fff rrr 98.jjjj.1234 的行?对于这样一个微不足道的任务,您的脚本似乎很迂回。只需执行sed -i.bak -e '/123.ooo/d' -e '/aaaa - bbbb ccccc, dddd dddd, eeee fff (hhhhh ii jjj) 890a fff rrr 98.jjjj.1234/d' file 并完成它。
  • edit您的问题向我们展示您输入的代表性示例和相应的所需输出。
  • 你想要的输出是什么?
  • 对不起我的英语不好。

标签: arrays bash sed


【解决方案1】:

以此作为使用数组和sed的练习:

您的代码的问题是文件作为单个值被读取到变量 VAR 中,而您想创建一个数组,其中每一行都作为自己的数组条目。

分配给数组使用

VAR=( ... )

要在换行符上拆分输入,请将IFS 变量设置为单个换行符的值。

sed 编辑脚本还有另一个问题。您似乎想使用# 作为正则表达式的分隔符(实际上是“sed 地址”)。如果你想这样做,第一个# 必须被转义(\#)。只有 sy sed 编辑命令的参数可以使用任何非转义字符作为分隔符。

#!/bin/bash

IFS=$'\n'
VAR=( $(cat /tmp/3.txt) )
LEN=${#VAR[@]}
for (( i=0; i<${LEN}; i++ ));
do
  echo ${VAR[$i]}
  sed -i -e "\#"${VAR[$i]}"#d" /tmp/3.txt
  cat /tmp/3.txt
done

或者,稍微清理一下:

#!/bin/bash

IFS=$'\n'

VAR=( $(</tmp/3.txt) )
LEN=${#VAR[@]}

for (( i = 0; i < LEN; i++ )); do
    echo ${VAR[$i]}
    sed -i -e "\#${VAR[$i]}#d" /tmp/3.txt
    cat /tmp/3.txt
done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多