我想在檔案開頭添加行,它適用于:
sed -i '1s/^/#INFO\tFORMAT\tunknown\n/' file
sed -i '1s/^/##phasing=none\n/' file
但是,當我的檔案為空時它不起作用。我找到了這些命令:
echo > file && sed '1s/^/#INFO\tFORMAT\tunknown\n/' -i file
echo > file && sed '1s/^/##phasing=none\n/' -i file
但最后一個擦除第一個(如果檔案不為空)
如果檔案為空,我想知道如何在檔案開頭添加行
我嘗試了一個回圈if [ -s file ]但沒有成功
謝謝!
uj5u.com熱心網友回復:
您可以使用插入命令 ( i)。
if [ -s file ]; then
sed -i '1i\
#INFO\tFORMAT\tunknown\
##phasing=none' file
else
printf '#INFO\tFORMAT\tunknown\n##phasing=none' > file
fi
請注意,\tfor tab 不是 POSIX,并且不適用于所有 sed 實作(例如 BSD/Apple,-i在那里的作業方式也不同)。您可以改用原始選項卡或變數:tab=$(printf '\t')。
uj5u.com熱心網友回復:
您應該i在sed以下位置使用命令:
file='inputFile'
# insert a line break if file is empty
[[ ! -s $file ]] && echo > "$file"
sed -i.bak $'1i\
#INFO\tFORMAT\tunknown
' "$file"
或者,您可以sed使用printf以下命令在 shell 中放棄并執行此操作:
{ printf '#INFO\tFORMAT\tunknown\n'; cat file; } > file.new &&
mv file.new file
uj5u.com熱心網友回復:
顯式創建一個新檔案,然后移動它:
#!/bin/bash
echo -e '#INFO\tFORMAT\tunknown' | cat - file > file.new
mv file.new file
或者將檔案的全部內容放入記憶體中:
printf '#INFO\tFORMAT\tunknown\n%s' "$(cat file)" > file
uj5u.com熱心網友回復:
使用普通的 bash 和 shell 實用程式:
#!/bin/bash
header=(
$'#INFO\tFORMAT\tunknown'
$'##phasing=none'
)
mv file file.bak &&
{ printf '%s\n' "${header[@]}"; cat file.bak; } > file &&
rm file.bak
uj5u.com熱心網友回復:
ed如果可用/可接受,這是微不足道的。
printf '%s\n' '0a' $'#INFO\tFORMAT\tunknown' $'##phasing=none' . ,p w | ed -s file
- 如果檔案不存在,它甚至會創建檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/368382.html
