我想从文本文件中删除所有
行当前我有类似的东西:
def add_to_cart(request, product_id): if request.method == 'POST':
product = Product.objects.get(pk=product_id)
product.in_cart = True
product.save()
return redirect('cart')
有没有更优雅的方式?这似乎并不总是可行(仍然需要弄清楚“不可行”的参数是什么)。
答案 0 :(得分:0)
使用sed + grep进行当前尝试的更优雅的方法是仅使用awk:
awk -v a="$VAR_A_TO_BE_DELETED" -v b="$VAR_B_DONT_DELETE" '
($0 ~ b) || !($0 ~ a)
' "$FILE_NAME" > temp_file &&
mv temp_file "$FILE_NAME"
,并且,由于您有时说这不起作用,并猜测这是由于变量内容中的正则表达式元字符所致,因此正确的做法是使用字符串操作而不是正则表达式:
awk -v a="$VAR_A_TO_BE_DELETED" -v b="$VAR_B_DONT_DELETE" '
index($0,b) || !index($0,a)
' "$FILE_NAME" > temp_file &&
mv temp_file "$FILE_NAME"
如果您的变量可以包含反斜杠,例如\t
,然后以上内容将对其进行扩展,例如到制表符。如果存在问题,则可以在变量分配的每个反斜杠之前添加一个反斜杠,或者执行以下操作:
awk '
BEGIN {
a=ARGV[2]; ARGV[2]=""; ARGC--
b=ARGV[3]; ARGV[3]=""; ARGC--
}
index($0,b) || !index($0,a)
' "$FILE_NAME" "$VAR_A_TO_BE_DELETED" "$VAR_B_DONT_DELETE" > temp_file &&
mv temp_file "$FILE_NAME"