我有一個檔案,我正在嘗試查找和替換一串文本。該檔案的內容是:
/**
* Version: 1.5.1
* Tested up to: 5.8
**/
我正在嘗試使用 awk 和 sed 的組合將提交哈希附加到檔案內的版本號上,但我遇到了困難。以前,這作業得很好,但不再正常作業:
VERSION_LINE=$(awk '/\* Version:/' style.css)
COMMIT_HASH=$(git rev-parse --verify HEAD | head -c 7)
sed -i -e "${VERSION_LINE}s/$/-${COMMIT_HASH}/" style.css
我希望$VERSION_LINE回傳* Version: 1.5.1但檢查它的內容,它實際上回傳了一堆檔案名(不包含字串)和末尾的那一行。
$ echo $VERSION_LINE;
404.php LICENSE archive.php comments.php dist footer.php functions.php header.php includes index.php page.php partials readme.txt screenshot.png search.php searchform.php single.php style.css woocommerce woocommerce.php Version: 1.5.1
但是當我運行awk '/\* Version:/' style.css它時,它確實回傳了正確的行,但是將它存盤在一個變數 viaVERSION_LINE=$(awk '/\* Version:/' style.css)中回傳了一堆檔案名。為什么會有差異?
嘗試以下操作也會回傳不正確的值:
$ $VERSION_LINE=$(cat style.css | grep '* Version:')
$ -bash: 404.php: command not found
作業正常:
$ awk '/\* Version:/' style.css
$ * Version: 1.5.1
不起作用:
$ VERSION_LINE=$(awk '/Version:/' style.css)
$ echo $VERSION_LINE
404.php Gruntfile.js LICENSE README.md archive.php changelog.txt comments.php composer.json composer.lock cypress.json docs footer.php functions.php header.php includes index.php languages manifest.xml package.json page.php partials phpcs.xml phpunit.xml postcss.config.js readme.txt screenshot.png search.php searchform.php single.php style.css vendor woocommerce woocommerce.php yarn.lock Version: 1.5.1
當前版本的 Bash:
$ bash --version
$ GNU bash, version 5.1.4(1)-release (x86_64-pc-linux-gnu)
uj5u.com熱心網友回復:
您只能使用以下方法執行此操作awk:
awk -v hash="${COMMIT_HASH}" '/\* Version:/{$3=$3""hash}1' style.css > style.css.tmp \
&& mv style.css.tmp style.css
uj5u.com熱心網友回復:
直接的問題是您需要參考賦值以防止 shell 擴展文字*:
tripleee$ ls
foo bar baz
tripleee$ poo=$(echo '*')
tripleee$ echo "$poo"
foo bar baz
tripleee$ poo="$(echo '*')"
tripleee$ echo "$poo"
*
但是使用 Awk 查找要替換的行的整個轉移是不必要的(基本上是計數行或列舉行號的變體,以便我可以遍歷它們-為什么這是反模式?)-您可以輕松使用sed自身來查找該行。
commit_hash=$(git rev-parse --verify HEAD | head -c 7)
sed -i -e "/\* Version:/s/$/-${commit_hash}/" style.css
(還要注意私有變數使用小寫。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/358073.html
標籤:猛击
上一篇:bash變數中的回車
