簡體   English   中英

Shell 中有沒有辦法將值替換為正則表達式模式?

[英]Is there a way in Shell to substitute a value into the regex pattern?

我正在編寫一個 Python 腳本,將某種格式的 XML 文件轉換為 JSON 格式。 該練習來自麻省理工學院缺失的學期。 ( xml_to_json )

我對如何替換 shell 中的正則表達式模式中的值有疑問。(我正在使用 python 中的子進程庫來訪問 shell sed 程序)

我使用了 Python 庫 'subprocess' 並做了如下操作。

# xml_to_json.py

num = 1001(or it could be other numbers)

subprocess.call(["sed","-E","-i","","${num}s/,$//","example-data.xml"])

我想做的是使用變量“num”,將值替換到這個位置(${num}),這樣我就可以替換到特定的行號。

我知道您可以像這樣使用 shell 中的變量 ($variable) 但它似乎在這里不起作用。

我知道我可以定義一個行號范圍,我想在其中執行“sed”工作,例如“%1,100s/regexpattern/regex/”。

如何使用變量將行號放在“s”前面?

num不是 shell 變量,而是 python 變量。 只需在 python 中構建您的參數字符串以包含正確的值:

subprocess.call(["sed","-E","-i","", str(num) + "s/,$//","example-data.xml"])

或使用 f 弦:

subprocess.call(["sed","-E","-i","", f'{num}s/,$//',"example-data.xml"])

請注意,不小心將值插入 shell 命令可能會使您容易受到命令注入。 在這種情況下,它似乎是安全的,因為num是一個簡單的數值,而不是用戶提供的數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM