我根据一个给定的值(相关人员的姓名),在我的文件中删除了3行以来的方式。 我设法删除了我的文件的最后几行,但没有在值之后随机删除行。你能救我吗?
test.txt - 之前:
Name : Mike
Surname : Tilmen
-----------------------------------
Name : Mould
Surname : Told
-----------------------------------
Name : May
Surname : Dery
-----------------------------------
test.txt - 名称为“模具”(不工作)之后:
Name : Mike
Surname : Tilmen
-----------------------------------
Name : May
Surname : Dery
-----------------------------------
答案 0 :(得分:0)
[[ ]]
构造,它可用于对bash中字符串的属性进行各种测试(包括将它们与正则表达式进行比较或执行子字符串检查)。如果您编写了如下脚本:
#!/usr/bin/env bash
key_to_delete=$1
value_to_delete=$2
sep_re='^-+[[:space:]]*$'
block=''
matched=0
while IFS= read -r line; do
if [[ $line =~ $sep_re ]]; then
if (( matched == 0 )); then
[[ $block ]] && printf '%s%s\n' "$block" "$line"
fi
block=''
matched=0
else
if [[ $line =~ ^"${key_to_delete}"[[:space:]]+:[[:space:]]+"${value_to_delete}"[[:space:]]*$ ]]; then
matched=1
fi
block+="$line"$'\n'
fi
done
...并且,将该脚本保存为remove_kv
,运行:
remove_kv Name Mould <in.txt >out.txt
...然后你的out.txt
将删除名称为Mold的条目。
答案 1 :(得分:0)
你可以这样使用gawk
:
$ awk 'BEGIN{RS="\n-[-]+\n"}
/\<Mould\>/{next}
{printf "%s\n-----------------------------------\n", $0}' file
打印:
Name : Mike
Surname : Tilmen
-----------------------------------
Name : May
Surname : Dery
-----------------------------------