我認為它應該使用sed、regex進行替換,并選擇下一行的版本和追加,等等。
輸入檔案
name: abc.def
版本:1.0.0
輸出檔案
name: abc-def-1.0.0.tar.gz
版本:1.0.0
uj5u.com熱心網友回復:
如果ed是可用的/可接受的,鑒于你的輸入檔案,像這樣的東西應該可以做到。
名為
script.ed的腳本(根據你自己的意愿命名)
2t.
2s/^version: *//
s/$/.tar.gz/
1s/$/-/
s/./-/
.,2j
%p
Q
然后針對該檔案運行它。假設檔案名是
file.txt
ed -s file.txt < script.ed
如果你對輸出感到滿意,或者需要原地編輯,請將
Q改為w。移除
%p以靜止輸出。
一個簡短的解釋。除了
%p和Q之外,逐一/逐行地運行命令。
2t.表示復制或拷貝檔案中的第2行。其輸出結果是:
name: abc.def
版本:1.0.0
版本:1.0.0
2s/^version: */ 從第2行中洗掉前面的字串version:和它后面的任何空間量。輸出結果是:
name: abc.def
1.0.0
版本:1.0.0
s/$/.tar.gz/在同一行緩沖區,即有關檔案的第2行。在最后添加字串.tar.gz。輸出結果是:
name: abc.def
1.0.0.tar.gz
版本:1.0.0
1s/$/-在檔案的第1行添加一個尾部破折號-。輸出結果是:
name: abc.def-
1.0.0.tar.gz
版本:1.0.0
s/./-在同一行(第1行)替換/改變點.為短線-。輸出結果是:
name: abc-def-
1.0.0.tar.gz
版本:1.0.0
.,2j在同一行(第1行),點.代表當前行,第2行將它們連接起來。j命令就是這樣。最后的輸出結果是:
name: abc-def-1.0.0.tar.gz
版本:1.0.0
參見:
還有你的本地man頁。
man 1p ed
uj5u.com熱心網友回復:
perl -i.bak -lne 'if (/name: (.*)/) { ($name = 1) =~ y/./-/ } elsif (/version: (.*)/) {
$version = 1; print "name: $name-$version.tar.gz
$_" } else { print }' infiles
uj5u.com熱心網友回復:
cat file
名稱:abc.def
版本:1.0.0
你可以用awk創建一個包含版本號的變數,并在sed命令中的for回圈
for f in file; do
ver=$(awk '/version/ {print 2}' $f)。
sed -Ei "/name/ {s/(S ). (S )/1-2-$ver.tar.gz/}"/span> $f;
done
cat file
名稱:abc-def-1.0.0.tar.gz
版本:1.0.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/318325.html
標籤:
