Bash
使用 printf 在文件開頭插入帶格式的文本
我需要在文本文件的開頭附加具有特定格式的內容。我研究瞭如何在 Bash 中將文本附加到多個文本文件的開頭和結尾,但不確定如何適應我的情況。
程式碼
printf 'Anything\tyou\twant\tto\tadd' 0a . x | ex printf.csv
預期產出
$ head -n 1 printf.csv; Anything you want to add
注意:我更喜歡一個
printf
解決方案。
printf
將格式字元串作為第一個非選項參數。如果第一個參數沒有使用格式說明符%s
,那麼其餘參數實際上是無用的。因此,如果您想使用第一個參數,因為這\t
是解釋轉義字元的地方,則必須使其余文本也適合其中。- 正如那個答案所說:
0a
表示“在第 0 行之後附加文本”(換句話說,在第一行之前)。下一行是要在第 0 行之後“追加”的文字文本。一行.
上的句點 ( ) 單獨結束要追加的文本。
0a
應該在要附加的文本之前。所以,像:
printf '0a\nAnything\tyou\twant\tto\tadd\n.\nx\n' | ex printf.csv
例子:
% printf '0a\nAnything\tyou\twant\tto\tadd\n.\nx\n' | ex printf.csv "printf.csv" [New file] "printf.csv" [New file] 1 line, 25 characters % cat printf.csv Anything you want to add
隨著
ex
,那寧願是這樣的:printf '%b\n' 0a 'Anything\tyou\twant\tto\tadd' . x | ex -s printf.csv
或者:
printf '0a\nAnything\tyou\twant\tto\tadd\n.\nx\n' | ex -s printf.csv
請注意,參數辨識的轉義序列
%b
與格式參數中的轉義序列不同。前者是echo
那些,後者是標準的類似 C 的那些(儘管許多printf
實現都對它們進行了擴展)。這對此沒有什麼不同\t
,但是\11
您需要為此編寫\011
參數%b
(至少如果您想便攜的話)。另一種選擇是使用
%s
但使用 ksh93 樣式的$'...'
引號進行\t
擴展:printf '%s\n' 0a $'Anything\tyou\twant\tto\tadd' . x | ex -s printf.csv
在支持它們的地方(ksh93、zsh、bash、FreeBSD sh、busybox ash 至少),這些
$'...'
引號通常支持標準 C 轉義(帶副檔名),就像格式參數中一樣printf
(與%b
參數或不同echo
)。