Sed
如何將 sed 輸出通過管道傳輸到 printf 以進行格式化?
我正在使用 Tecplot 處理風洞數據,但 Tecplot 的輸入需要特定格式的變數規範;每個變數都用雙引號括起來
"Variable Name"
。問題是獲得雙引號並不容易。我在一篇文章中發現printf ' "%s" '
會產生這種效果。然而, printf 對輸入的內容相當挑剔。sed
我之前一直無法printf
使用printf ' "%s" ' $(sed ...)
. 這個結構有效,但只是解決我的問題的一半。我現在想用 this 的輸出printf
替換sed
為printf ' "%s" ' $(sed ...)
. 我得到的只是一個未終止的's
:sed s/XYZXYZXYZ/` printf ' "%s" ' $(sed -n 1,265p Run-0020) `/ ../../wt/wt-layout_A.dat sed: -e expression #1, char 12: unterminated `s' command
如前所述,如何將 XYZXYZXYZ 更改為 printf 的輸出?
嘗試將您的
printf
命令放在雙引號中。使用$(…)
命令替換語法並在命令中添加單引號sed
,它將是:sed 's/XYZXYZXYZ/'"$(printf ' "%s" ' $(sed -n '1,265p' Run-0020))"/ ../../wt/wt-layout_A.dat
您可能可以刪除
printf
命令中的第一個空格字元,將其更改為printf '"%s" '
.
您的問題是,您試圖用
sed
. 替換字元串可能沒有換行符。它們需要編碼為\n
一種解決方法可能是用不尋常的字元在替換字元串中編碼換行符,然後再次解碼它們 - 在中間只需在需要的地方添加引號:
sed \ #replace newlines in input with END OF TEXT byte as separator #not using NUL byte as many shells ignore them #ignore newline on last entry -e "s/XXX/$(sed -n 1,265p RUNFILE | tr '\n' '\03' | sed 's/\x03$//' )" \ #replace new separator by "<separator>", as well addin " at beginning and end of line -e 's/\x03/"\0"/g;s/^/"/;s/$/"/' #reintroduce newlines -e 's/\x03/\n/g' LAYOUTFILE > OUTPUT
樣本輸入
$cat LAYOUTFILE XXX $cat RUNFILE 1 .... 300 $cat OUTPUT "1" .... "265"
PS:忽略使用
printf
你所需要的只是字元串周圍的雙引號。