我有一個包含如下內容的檔案:
[project]
name = "sinntelligence"
version = "1.1.dev12"
dependencies = [
"opencv-python",
"matplotlib",
"PySide6",
"numpy",
"numba"
]
現在我想找到“version”字串并增加“dev”之后的最后一個數字。因此在上面的例子中我想改變
version = "1.1.dev12"
至
version = "1.1.dev13"
等等。grep我能夠用這個正則運算式得到這一行:
grep -P "^version.*dev[0-9] "
但是由于我想替換檔案中的某些內容,我認為使用它會更有意義sed。然而,sed我什至沒有找到那條線(即沒有被替換):
sed -i "s/^version.*dev[0-9] /test/g" sed-test.txt
任何想法 1)我在這里做錯了什么sed以及 2)如何將“dev”數字增加一個并將其寫回檔案(僅使用典型的 Ubuntu Linux 命令列工具)?
uj5u.com熱心網友回復:
您使用grep了-P啟用 PCRE 正則運算式引擎的選項,并且sed使用了 POSIX BRE 模式。這就是為什么您甚至不匹配該行的原因。
然后,使用 sed,您將無法輕松評估和更改數字,您可以使用perl:
perl -i -pe 's/^version.*dev\K(\d )/$1 1/e' sed-test.txt
請參閱在線演示:
#!/bin/bash
s='[project]
name = "sinntelligence"
version = "1.1.dev12"
dependencies = [
"opencv-python",
"matplotlib",
"PySide6",
"numpy",
"numba"
]'
perl -pe 's/^version.*dev\K(\d )/$1 1/e' <<< "$s"
輸出:
[project]
name = "sinntelligence"
version = "1.1.dev13"
dependencies = [
"opencv-python",
"matplotlib",
"PySide6",
"numpy",
"numba"
]
uj5u.com熱心網友回復:
我在這里用 sed 做錯了什么
您必須使用-E選項來啟用擴展的正則運算式:
$ sed -E "s/^version.*dev[0-9] /test/g" sed-test.txt
[project]
name = "sinntelligence"
test"
dependencies = [
"opencv-python",
"matplotlib",
"PySide6",
"numpy",
"numba"
]
如何將“dev”數字增加一個并將其寫回檔案(僅使用典型的 Ubuntu Linux 命令列工具)?
我會使用 awk,下面是這個 Ed Morton 的回答中解決方案的改編:
awk -i inplace '/^version/ {split($3,lets,/[0-9] "$/,digs); $3=lets[1] digs[1] 1 "\""} 1' sed-test.txt
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/533748.html
標籤:正则表达式sedgrep
上一篇:從單詞的開頭洗掉所有匹配的字符
下一篇:替換多行文本列中行中的第一個字符
