|
1
108
或者,如果您愿意:
编者按:使用
GNU
|
|
|
2
228
编写一个SED脚本,该脚本只会将第一个出现的“apple”替换为“banana”。 示例输入:输出:
这是一个简单的脚本:
编者按:使用
GNU
|
|
|
3
50
这对我有用。 例子
编者按:两者都适用于
GNU
|
|
|
4
32
安 概述 在众多有帮助的人中 现有答案 ,补充 解释 :
这里的示例使用了一个简化的用例:只在第一个匹配行中将单词“foo”替换为“bar”。
GNU
Ben Hoffstein's anwswer
向我们展示GNU提供了
延伸
到
POSIX specification for
如果你结合了
仅限POSIX功能
自从
MikhailVS's answer 提到这项技术,在这里举一个具体的例子:
注:
当发生这种情况时,范围地址
相反,如果第一行没有匹配,
净效应与GNU相同
非靶场进近
potong's answer
演示
环
技术
那个
不需要一个范围
因为他使用
GNU
循环技术1:第一次匹配时,执行替换,然后 输入一个循环,该循环仅按原样打印其余行 :
循环技术2,用于 仅小文件 : 将整个输入读取到内存中,然后对其执行单个替换 .
〔1〕
1.61803
提供发生的情况的示例
|
|
|
5
22
你可以用锥子做类似的事情。
说明:
当行与“include”匹配时,在之间运行操作语句,但我们尚未处理它。
此打印内容包括“newfile.h”,我们需要转义引号。然后我们将done变量设置为1,这样就不会添加更多的include。
这意味着“打印出行”—一个空操作默认为打印$0,它打印出整行。一行,比SED IMO更容易理解:—) |
|
|
6
16
相当全面的答案集 linuxtopia sed FAQ . 它还强调人们提供的一些答案不适用于非GNU版本的SED,例如
在非GNU版本中必须
但是,这个版本不适用于GNUSED。 这是一个同时适用于以下两种情况的版本:
前任:
|
|
|
7
12
只需在末尾添加出现次数:
|
|
8
12
此脚本的工作方式:对于介于1和第一行之间的行
但是,如果第一个
|
|
|
9
8
可能的解决方案:
说明:
|
|
|
10
3
我知道这是一篇老文章,但我有一个解决方案,我以前用过:
基本上用grep找到第一次出现的地方并停在那里。同时打印行号IE 5:line。通过管道将其导入SED,然后移除:和之后的任何内容,这样您就只剩下一个行号了。将其导入到SED中,并在末尾添加s/*/replace,该结尾将提供一个单行脚本,该脚本将被导入到最后一个SED中,以作为文件中的脚本运行。 因此,如果regex=include and replace=blah并且grep发现的第一个事件在第5行,那么最后一个sed的数据将是5s/*/blah/。 |
|
|
11
2
我会用一个awk脚本:
然后用awk运行:
可能是马虎,我是新来的。 |
|
|
12
2
作为另一种建议,您可能希望查看
|
|
|
13
2
我最终在一个bash脚本中实现了这一点,该脚本用于在RSS提要的每个项目中插入一个唯一的时间戳:
它只更改第一次出现的内容。
文件被读入,stdout被重定向到工作文件。
据我所知,
在我的例子中,我将命令放在双引号中,因为我在带有变量的bash脚本中使用它。 |
|
|
14
2
使用
FreeBSD
|
|
|
15
2
这可能适用于您(GNU SED):
或者如果内存不是问题:
|
|
|
16
2
如果有人来这里替换所有行中第一个出现的字符(如我本人),请使用以下命令:
例如,通过将1改为2,可以只替换第二个A。 |
|
|
17
0
以下命令删除文件中第一个出现的字符串。它也删除了空行。它出现在一个XML文件中,但可以与任何文件一起使用。 如果您使用XML文件并希望删除标记,则非常有用。在本例中,它删除第一个出现的“istag”标记。 命令:
源文件(source.txt)
结果文件(output.txt)
PS:在SolarisSunos5.10(相当老的版本)上它对我不起作用,但是它在Linux2.6,SED版本4.1.5上起作用。 |
|
|
18
0
没有什么新的,但也许会有一个更具体的答案:
例子:
正在提取窗口ID
|
|
|
19
0
posixly(在sed中也有效),仅限 一 使用了regex,只需要一行内存(和往常一样):
解释:
|
|
|
20
0
用GNU SED
在一般情况下,您必须重写SED表达式,因为模式空间现在保存整个文件,而不是只保存一行。一些例子:
|