2016-05-30 63 views
0

我知道有些人可能会说解决方案是sed但它不适用于我 所以,事情是,我读了一个var与read var然后我想知道如何控制该var是否存在于指定的列通过我的存档,如果它不只是继续询问请输入一个有效的代码,如果它正确的只是删除该行。感谢如何删除在bash中包含变量的行?

CODE

read var 
sed -i '/$var/d' file.txt 

,我希望把一些短期测试仪是确认是否ü把一个有效的代码或不。

的文件的结构是

code;Name;Surname 
+2

你能分享你的'sed'命令和字符串/文件,你运行它呢? –

+0

'阅读code''sed -i'/ $ code/d'file.txt'并且我想把一些确认代码放在文件中 – nabmaster

+0

是的,很抱歉,我很急 – nabmaster

回答

0

以下使用AWK搜索和删除线,第一列是$code。如果一条线被移除,那么awk将成功退出,并且将调用break

file="input_file" 
while :; do 
    echo "Enter valid code:" 
    read -r code 
    [ -n "$code" ] || continue 
    awk -F';' -v c="$code" '$1 == c {f=1;next}1;END{exit(f?0:1)}' \ 
    "$file" > "$file.out" && break 
done 
mv "$file.out" "$file" 

这将继续在$file要求一个代码,直到用户输入在其中创建点$file.out一个有效的代码和迭代破碎。

然后file.out重命名为file。技术上,每次都会创建$file.out

+0

它不起作用我的file.txt消失并出现在file.out的名字下 – nabmaster

+0

@nabmaster最后的'mv'命令应该处理这个问题。还要将'file =“...”'改为您的需要。 – andlrc

+0

现在工作顺利!谢谢 – nabmaster

0

你可以有$var${var}扩大了与

read var 
sed -i '/'${var}'/d' file.txt 

但当$var有空间会发生什么?没事找事,所以使用双引号,以及:

read var 
sed -i '/'"${var}"'/d' file.txt 
1

有没有空格或奇数位解析,所以sed的,需要的不是单引号的位置:

read var 
sed -i /"$var"/d file.txt 

及示范 - 做一个从1至3个列表,删除2:

seq 3 > three.txt; var=2; sed -i /"$var"/d three.txt ; cat three.txt 

输出:

1 
3 
0

我使用awk试图在以下文件:

$cat test.txt 
code;Name;Surname 
xyz;n1;s1 
abc;dd;ff 
xyz;w;t 
abc;ft;op 

将打印将会删除。但我不能打印信息后,要弄清楚如何从AWK删除行线。

$var=xyz | awk -v var="$var" -F ";" '{ if ($1 == var) print "FOUND " var " And Going to delete the line" NR " " $0 ; }' test.txt 
FOUND xyz And Going to delete the line2 xyz;n1;s1 
FOUND xyz And Going to delete the line4 xyz;w;t 

下面的命令将显示信息并将删除日期。但是需要解析输入文件。

$var=xyz | awk -v var="$var" -F ";" '{ if ($1 == var) print "FOUND " var " And Going to delete the line" NR " " $0 ; }' test.txt && awk -v var="$var" -F ";" '($1 != var)' test.txt > _tmp_ && mv _tmp_ test.txt 
FOUND xyz And Going to delete the line2 xyz;n1;s1 
FOUND xyz And Going to delete the line4 xyz;w;t 

删除后新文件:

$cat test.txt 
code;Name;Surname 
abc;dd;ff 
abc;ft;op