【问题标题】:How to edit beginning and ending of file with sed如何使用 sed 编辑文件的开头和结尾
【发布时间】:2017-09-04 13:54:10
【问题描述】:

我正在尝试使用sed(在首先删除文件末尾的尾随逗号之后)在文件的开头和结尾添加数组括号,以将文件的所有内容放入数组中。我首先使用这个 sed 命令从文件中删除最后一个逗号

sed '$ s/,$//' "$path"

之后,我使用下面的中间命令在文件的开头和结尾添加数组括号

 sed '$ s/,$//' "$path" |   sed 's/^.*$/[&]/' | tee $filename

这个sed 's/^.*$/[&]/' 应该匹配所有内容(从头到尾^$),然后在整个匹配项[&] 周围放置括号(即好像要将其放入数组中),但它改为放置数组括号在每一行的开头和结尾。

问题,如何用sed编辑文件的开头和结尾?

整个脚本

for path in dirname/* do
   name="${path##*/}"
   sed '$ s/,$//' "$path" | sed 's/^.*$/[&]/' | tee "newdir/$name"
done

【问题讨论】:

    标签: sed


    【解决方案1】:

    sed 是一个逐行工作的编辑器,因此命令sed 's/^.*$/[&]/' 会在每一 行中添加括号。如果您只想编辑文件的开头和结尾,则需要将行号放在替换的前面($ 代表最后一行):

    sed -e '1 s/^/[/' -e '$ s/$/]/'
    

    由于您已经有一个删除尾随 , 的命令,您可以将它与上述替换结合起来。您的命令行将如下所示:

    sed -e '1 s/^/[/' -e '$ s/,*$/]/' "$path" | tee $filename
    

    【讨论】:

    • 好的,谢谢。我刚刚测试了它,输出不是我所期望的。也许我的问题不清楚。我得到的输出是文件中每一行开头和结尾的方括号。如果一个文件有多行,就像每一行都有一个数组。但是,我希望整个文件位于一个数组中,即开头有一个方括号,结尾有一个右括号。这就是为什么我试图匹配^.*$ 一切...... sed 只是一个行编辑器吗?有没有办法匹配整个文件?
    • 哦,我明白了,sed 只能逐行编辑......我猜我使用了错误的工具。无论如何我都会接受你的回答,因为它回答了这个问题。如果你能告诉我在哪里看评论,我将非常感激。
    • 好的,很好,谢谢你,这在我测试时似乎有效,但请注意,你的右方括号似乎面临错误的方式来关闭数组
    • @Leahcim 太好了,我还编辑了我的答案,稍后将清理我的 cmets。祝你有美好的一天。
    猜你喜欢
    • 2013-06-27
    • 2020-11-22
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    • 2011-12-17
    • 2013-04-13
    相关资源
    最近更新 更多