在shell脚本中使用Sed插入文本到文件

时间:2009-07-28 08:13:24

标签: unix sed

我尝试在第一行插入文字 使用sed的文件。我在sh内执行此操作 脚本。

但为什么它会挂在sed执行线上?

#! /bin/sh

# Command to execute
# ./mybashcode.sh test.nbq

nbqfile=$1   
nbqbase=$(basename $nbqfile nbq)
taglistfiletemp="${nbqbase}taglist_temp"
taglistfile="${nbqbase}taglist"


./myccode $nbqfile | 
sort | 
uniq -c | 
awk '{print $2}' > $taglistfiletemp 

noftags=$(wc -l $taglistfiletemp | awk '{print $1}')
echo $noftags


# We want to append output of noftags
# to the first line of taglistfile

sed '1i\
$noftags' > $taglistfile

# why it hangs here
# the content of taglistfile is NIL

3 个答案:

答案 0 :(得分:6)

我不确定你要对sed做什么,但它需要两个输入,脚本(通常是搜索/替换)和你想要执行它的数据上。如果您只指定一个,则假定它已获得正则表达式并等待stdin上的数据。由于你没有在stdin上提供任何内容,它会无限期地挂起。

此外,您还有“$noftags”而不是“$noftags”。先前将输出$noftags,后者将输出变量的内容,因为单引号不允许变量扩展。

答案 1 :(得分:2)

我在这里弄错了吗? 或者,您要做的只是在另一个文件的开头插入一些文本?

# $NewInitialText
# $fileToInsertInto
echo $NewInitialText > temp.file.txt
cat $fileToInsertInto >> temp.file.txt
mv temp.file.txt $fileToInsertInto

这比sed更容易吗? - Pun意图我猜。

答案 2 :(得分:2)

它挂起,因为您忘记为sed提供输入文件。

....
...
sed -i.bak "1i $noftags" $taglistfile 
...