我知道有些人可能会说解决方案是sed
但它不适用于我 所以,事情是,我读了一个var与read var
然后我想知道如何控制该var是否存在于指定的列通过我的存档,如果它不只是继续询问请输入一个有效的代码,如果它正确的只是删除该行。感谢如何删除在bash中包含变量的行?
CODE
read var
sed -i '/$var/d' file.txt
,我希望把一些短期测试仪是确认是否ü把一个有效的代码或不。
的文件的结构是
code;Name;Surname
我知道有些人可能会说解决方案是sed
但它不适用于我 所以,事情是,我读了一个var与read var
然后我想知道如何控制该var是否存在于指定的列通过我的存档,如果它不只是继续询问请输入一个有效的代码,如果它正确的只是删除该行。感谢如何删除在bash中包含变量的行?
CODE
read var
sed -i '/$var/d' file.txt
,我希望把一些短期测试仪是确认是否ü把一个有效的代码或不。
的文件的结构是
code;Name;Surname
以下使用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
。
你可以有$var
或${var}
扩大了与
read var
sed -i '/'${var}'/d' file.txt
但当$var
有空间会发生什么?没事找事,所以使用双引号,以及:
read var
sed -i '/'"${var}"'/d' file.txt
有没有空格或奇数位解析,所以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
我使用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
你能分享你的'sed'命令和字符串/文件,你运行它呢? –
'阅读code''sed -i'/ $ code/d'file.txt'并且我想把一些确认代码放在文件中 – nabmaster
是的,很抱歉,我很急 – nabmaster