我如何使用sed删除第二行?

时间:2016-07-21 09:10:57

标签: arrays bash sed

我有一个文本文件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然后删除123.ooo中的/tmp/3.txt行 然后echo aaaa - bbbb ccccc, dddd dddd, eeee fff (hhhhh ii jjj) 890a fff rrr 98.jjjj.1234并在/tmp/3.txt中删除此行 但是第二行有空格,我怎么能用sed删除第二行?

抱歉我的英语不好。 我想echo第一行,然后删除文件中的第一行。 echo第二行,然后删除文件中的第二行。 echo第三行,然后删除文件中的第三行。

1 个答案:

答案 0 :(得分:0)

将此作为练习使用数组和sed

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

要分配给数组使用

VAR=( ... )

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

您还有另一个问题sed编辑脚本。您似乎希望使用#作为正则表达式的分隔符(实际上是&#34; sed地址&#34;)。如果您要执行此操作,则必须转义第一个#\#)。只有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