无法解释Awk的行为

时间:2016-03-17 17:47:48

标签: bash awk

我是bash脚本的新手。在我的脚本中,我需要删除不以' a'开头的行。来自文本文件的字符,在temp.txt文件中写入这些行。我使用awk的这种语法来完成这项工作。

from flask import Flask, redirect, request, render_template
app = Flask("app_name")

@app.route('/', methods=["GET", "POST"])
def login_route():
    if request.method == "GET":
        return render_template("login_page.html")
    elif request.method == "POST":
        # Login user
        return redirect("main_page", code=303)

@app.route("/")
def main_page():
    return "I'm the main page."

app.run(host="0.0.0.0", port=5001)

当我运行脚本时,它在开头说出所有不以值开头的行,然后是以值开头的行。 有人可以向我解释为什么会发生这种情况并最终建议我进行更正吗?

2 个答案:

答案 0 :(得分:1)

基本上你可以使用grep

grep -v '^a' file1 > file2

^匹配行的开头。 ^a与该行开头的a匹配。 -v否定匹配意味着grep将输出所有不以a开头的行。

如果要将变量传递给该命令,则需要使用双引号而不是单引号:

grep -v "^$value" file1 > file2

但要注意$value将被解释为正则表达式的事实。例如,如果value=.,它将匹配任何字符,而不仅仅是文字.

为了避免这种情况,awk再次浮现在脑海中,这是我的最终建议:

awk -v value="$value" 'substr($0,0,length(value)) != value' file1 > file2

答案 1 :(得分:1)

变量不会用单引号扩展。你的脚本做的是它排除了以字符串$value开头的所有行,后面跟着空格。