此sed命令将标记插入文件的开头:

sed -i "1s/^/<?php /" file


如何使用sed在每个文件的末尾插入内容?

评论

{cat file;回显“文件末尾”; }> newFile,也可以通过sh。*使用。 (不是sed,但工作简单)

一个简单的echo“ Cool Text” >>文件也可以解决问题。

stackoverflow.com/a/30219386/385273

#1 楼

最简单的方法是:
sed -i -e '$aTEXTTOEND' filename

如何工作
$匹配最后一行(这是正常的sed地址; 4aTEXTTOEND将在第四行之后插入),a是append命令,TEXTTOEND是要添加的内容,filename是将在其中插入TEXTTOEND的文件

评论


在Makefile中将$转义为$$。

–stevesliva
2014年12月3日,下午1:22

对于OS X sed -e'$ a \ NEWLINE \\'。用实际的新行替换NEWLINE。

–乔治·布卡拉(Jorge Bucaran)
15-10-18在15:47



该命令不支持新文件。 (零字节)

– zw963
16年11月11日在15:07

不适用于macOS。甚至Jorge Bucaran都没有评论:sed:1:“ $ a \ NEWLINE \\”:命令结尾\后面的多余字符

– Emanuele Paolini
18年8月15日在16:02

在debian 9中,它添加了新行,而不是在最后一行的末尾添加。

–卢西亚诺·安德列斯·马蒂尼(Luciano Andress Martini)
18-09-18在13:29

#2 楼

在这种情况下,无需使用sed

echo "<?php" >> file

怎么样

评论


的确如此,但是您可以猜测OP的用例是将文件括在“ ”中,并一次性引用所有选定内容,因此他可能确实希望使用sed片段。

– dmckee ---前主持人小猫
09年9月6日15:12

另外,如果您这样做并且不想换行,请使用echo -n

– Vinko Vrsalovic
2009年9月6日15:15

我不喜欢猜测。每次尝试,我都是错的。

– innaM
2009年9月6日15:38

可接受的答案更有用的另一个原因是在sudo之前加上它,这导致此变化失败,因为echo是内置的shell命令,而不是$ PATH中的可执行文件。

–托尼·切萨罗(Tony Cesaro)
14-10-28在15:33

@TonyCesaro:echo是内置的,但也是在$ PATH中找到的可执行文件

–赞·山猫
16-12-28 at 12:51

#3 楼

假设您想将结尾的php标记放入文件中,那么

sed -i '$s/$/\n?>/' file


应该可以解决问题

评论


在需要对输入的最后一行进行任意操作的情况下,此方法效果很好。谢谢!

–杰伊·泰勒(Jay Taylor)
15年7月1日在23:17

对命令的分解解释将不胜感激

– GGhe
19年8月1日在21:57



#4 楼

使用sed'append(a)'命令。例如,在文件末尾添加两行:

sed -i -e '$a\
foo1 bar1\
foo2 bar2' file


#5 楼

有关多合一sed命令的信息,请参见原始文章。
find . -type f -exec sed -i -e "1s/^/<?php /" -e "$s/$/ ?>/" {} \;


#6 楼

以一种简单的方式来写和更改文件中特定行的内容。
如果要在特定行号插入任何内容,则可以使用以下命令:

sed -i '2i i have started' sheikh.log


其中2i-行号2和i代表插入。如果必须在最后一行插入,请使用$代替2。
我已经开始-要插入文本,并且sheikh.log是文件名。

我们也可以在通过使用以下命令在行中

sed -i '2c we have started' sheikh.log


i更改为we

#7 楼

sed -i '1s/^/<start</' file等效的是:

sed -i '$s/$/>end>/' file


这会将文本>end>添加到文件的最后一行(没有换行符)。当然,在这种情况下(也与您的示例相同),该文件需要至少包含一行(不为空)。这样,shell就会尝试处理字符串中的每个$。该命令将转换为:使用a(添加,结束)或i(插入,开始)还将插入换行符,并要求在BSD和GNU中进行不同的调用并且仍然需要一个非空文件。

对于GNU:

sed -i "$s/$/>end>/" file


对于BSD:

$ sed '1i<start<' file
$ sed '$a>end>' file


或者,在允许使用C字符串的外壳中: br />
$ sed '1i\
<start<' file
$ sed '$a\
>end>' file


也适用于空文件。

#8 楼

第一个和最后一个

我假设任何搜索如何在文件的开头/结尾插入/添加文本的人可能也需要知道如何做另一个。

cal |                            \
  gsed -E                        \
       -e     '1i\{'             \
       -e     '1i\  "lines": ['  \
       -e 's/(.*)/    "",/'    \
       -e '$s/,$//'              \
       -e     '$a\  ]'           \
       -e     '$a\}'


说明

这是带有扩展RegEx(cal)和6“的sed输出管道到gnu- gsed(在通过brew.sh安装的macOS上称为-E)脚本”(-e)并使用\换行以提高可读性。脚本1和2使用1i\来“在第1行插入”。脚本5和6使用$a\来“在行,追加”。我垂直对齐了文本输出,以使代码表示预期的结果。脚本3和4进行替换(后者仅适用于“ line ”行)。结果将命令输出转换为有效的JSON。

输出

{
  "lines": [
    "    October 2019      ",
    "Su Mo Tu We Th Fr Sa  ",
    "       1  2  3  4  5  ",
    " 6  7  8  9 10 11 12  ",
    "13 14 15 16 17 18 19  ",
    "20 21 22 23 24 25 26  ",
    "27 28 29 30 31        ",
    "                      "
  ]
}


评论


尽管我还没有对您的问题进行表决,但是请注意,我们已经有几个答案,其中包括一个被接受的答案,可以证明预期的结果。

– Jeff Schaller♦
19-10-22在12:12

@JeffSchaller Stack Exchange社区不是论坛。其目的不仅限于帮助OP畅通无阻。目标是为全球知识库提供许多选择,供搜索者在寻找答案时可以偶然发现。我将答案命名为“答案”的原因是为了帮助用户甚至在单击Google结果之前就可以识别该答案的实用程序。

–布鲁诺·布鲁诺斯基(Bruno Bronosky)
19-10-22在16:09

#9 楼

如果没有行/回车,请在行末添加文本hello并在不输出到终端的情况下就地编辑文件

sed -i '$s/$/hello/' file


评论


这与Vinko Vrsalovic的答案相同...

–斯蒂芬·基特(Stephen Kitt)
20年1月21日在21:55