我有一个文本文件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
第三行,然后删除文件中的第三行。
答案 0 :(得分:0)
将此作为练习使用数组和sed
:
您的代码的问题是文件作为单个值读入变量VAR
,而您想要创建一个数组,每行作为自己的数组条目。
要分配给数组使用
VAR=( ... )
要在换行符上拆分输入,请将IFS
变量设置为单个换行符的值。
您还有另一个问题sed
编辑脚本。您似乎希望使用#
作为正则表达式的分隔符(实际上是&#34; sed
地址&#34;)。如果您要执行此操作,则必须转义第一个#
(\#
)。只有s
和y
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