2016-07-21 182 views
2

我有一个文本文件3.txt,这样如何使用sed删除第二行?

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

什么是你的实际需求?在文件中删除包含模式'123.ooo'和'aaaa -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'并完成它。 – Inian

+0

请[编辑]您的问题向我们展示您的输入和相应的期望输出的代表性示例。 –

+0

你想要的输出是什么? –

回答

0

以这个作为一个练习中使用数组和sed

的问题与您的代码是该文件被视为单一的值放入变量VAR,而要创建的每行作为自己的一个数组数组入口。

要分配给数组使用

VAR=(...) 

要分割上换行符的输入时,IFS变量设置为单个换行的值。

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

#!/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