从bash中以数字开头的文件中删除一行

时间:2018-06-08 14:26:55

标签: regex bash csv parsing sed

我正在尝试用bash创建一个简单的CSV编辑器 我努力删除一条线。用户传入的身份证号码为 要删除的行(每行定义一个ID作为第一列)。
这是一个示例文件结构:

ID,Name,Surname
0,Mark,Twain
1,Cristopher,Jones

因此,将id保存为变量并将文件名保存在另一个变量(例如其file.csv)中,我尝试使用此行从bash中删除它:

read -p "Pass the object's ID: " idtoremove
fname=file.csv
sed -i -e "'/^$idtoremove*,/d'" $fname

但是,这对文件没有影响。这条线有什么问题?

另外,如何用变量中的字符串替换以给定ID开头的行?这是我必须面对的另一个问题,但我不知道如何处理这个问题。

2 个答案:

答案 0 :(得分:1)

以下脚本可以帮助您。它要求用户输入ID。

cat script.ksh
echo "Please enter the id to be removed:"
read value
awk -v val="$value" -F, '$1!=val'  Input_file

如果您想将输出保存到Input_file本身,请在上面的> tmp_file && mv tmp_file Input_file代码中添加awk

sed

cat script.ksh
echo "Please enter the id to be removed:"
read value
sed  "/^$value,/d"  Input_file

请使用上面sed -i.bak中的sed选项将输出保存到Input_file本身,并备份Input_file(更改前)。

答案 1 :(得分:0)

最好在awk

中完成
awk -v id="$idtoremove" -F, '$1 != id' file.csv

如果您正在使用gnu awk,那么您也可以在原地保存:

awk -i inplace -v id="$idtoremove" -F, '$1 != id' file.csv

对于其他awk版本,请使用:

awk -v id="$idtoremove" -F, '$1 != id' file.csv > $$.csv &&
mv $$.csv file.csv