Questions tagged «sed»

sed是用于过滤和转换文本的命令行流编辑器。

2
删除所有在定界符前没有n个字符的行
我有一个很长的文本文件(从此处开始),其中应包含6个十六进制字符,然后是一个“ break”(显示为一个字符,在下面的代码降价中似乎无法正确显示),然后是几个单词: 00107B Cisco Systems, Inc 00906D Cisco Systems, Inc 0090BF Cisco Systems, Inc 5080 Cisco Systems, Inc 0E+00 ASUSTek COMPUTER INC. 000C6E ASUSTek COMPUTER INC. 001BFC ASUSTek COMPUTER INC. 001E8C ASUSTek COMPUTER INC. 0015F2 ASUSTek COMPUTER INC. 2354 ASUSTek COMPUTER INC. 001FC6 ASUSTek COMPUTER INC. 60182E ShenZhen Protruly Electronic …


7
如何修复在错误的地方折断的线?
我的文本文件如下所示: This is one sentence that is broken. However this is a good one. And this one is somehow, broken into many. 我想删除任何行的尾随换行符,其后是以小写字母开头的行。 所以这应该是: This is one sentence that is broken. However this is a good one. And this one is somehow, broken into many. 我怎样才能做到这一点? 编辑:这里有一些非常好的答案,但是我选择接受第一个可行且最早的答案。非常感谢大家!

5
在Solaris中,“ sed -i”命令是否可以替代?
我的项目中有一项要求,就是将文件中的某些现有文本替换为foo其他文本,例如fooofoo: abc.txt name foo foo1 所以我尝试了: sed -i "s/foo/fooofoo/g" abc.txt 但是我得到这个错误: sed:非法选项- i 我在手册中发现必须使用: sed -i\ "s/foo/fooofoo/g" abc.txt 但是,这也不起作用。 我发现,替代品perl和awk也,但在Solaris中的解决方案sed,将不胜感激。 我正在使用此版本的bash: GNU bash版本3.2.57(1)-发行版(sparc-sun-solaris2.10)


8
sed在整个文件系统上就地删除行?
由于尚无法诊断的应用程序错误,我有数百台服务器装有完整的磁盘。有一个文件被重复的行填充了-不是日志文件,而是带有变量定义的用户环境文件(因此,我不能只是删除该文件)。 我编写了一个简单的sed命令来检查错误添加的行并删除它们,然后在文件的本地副本上对其进行测试。它按预期工作。 但是,当我在具有完整磁盘的服务器上尝试使用它时,大约收到以下错误(来自内存,而不是复制和粘贴): sed: couldn't flush /path/to/file/sed8923ABC: No space left on deviceServerHostname 当然,我知道这里没有空间了。这就是为什么我要删除内容!(sed我正在使用的命令会将4000+行文件减少到大约90行。) 我的sed命令就是sed -i '/myregex/d' /path/to/file/filename 尽管磁盘已满,有没有办法应用此命令? (它必须是自动化的,因为我需要将它作为快速修复程序应用于几百台服务器。) (显然,需要诊断应用程序错误,但是在此期间,服务器无法正常工作...。) 更新:通过删除我发现可以删除的其他内容解决了我所面临的情况,但是我仍然希望得到此问题的答案,这将对将来和其他人有所帮助。 /tmp不行 它在同一文件系统上。 在释放磁盘空间之前,我进行了测试,发现可以vi打开文件并运行以删除行:g/myregex/d,然后使用保存成功:wq。似乎应该可以自动执行此操作,而无需借助单独的文件系统来保存临时文件....(?)

6
从文件中删除行,具体取决于在另一个文件中找到的行
文件file1.txt包含以下行: /api/purchase/<hash>/index.html 例如: /api/purchase/12ab09f46/index.html 文件file2.csv包含以下行: <hash>,timestamp,ip_address 例如: 12ab09f46,20150812235200,22.231.113.64 a77b3ff22,20150812235959,194.66.82.11 我想过滤file2.csv,以删除在file1.txt中也存在哈希值的所有行。就是说: cat file1.txt | extract <hash> | sed '/<hash>/d' file2.csv 或类似的东西。 它应该很简单,但是我似乎无法使其工作。 任何人都可以为该任务提供有效的管道吗?

2
sed从行中删除所有开始的模式匹配
我有以下几行: abababtestab 我正在尝试找出一个sed表达式,以ab从该行的开头删除所有出现的内容,因此转换后的行应为: testab 我觉得这应该很简单,但是我真的一无所知sed。 到目前为止,我有: sed 's/^ab//' 但这仅会删除ab的首次出现。
11 sed 

2
重新索引大型CSV文件
我在这个有用的线程中仔细研究了答案,但是我的问题似乎相去甚远,以至于我无法想到一个好的答案(至少使用sed)。 我有一个很大的CSV文件(超过200 GB),其中的行如下所示: <alphanumerical_identifier>,<number> 在<alphanumerical_identifier>整个文件中唯一的位置。我想创建一个单独的文件,用索引替换第一列,即 <index>,<number> 这样我们得到: 1, <number> 2, <number> 3, <number> 可以awk在不将完整文件加载到内存的情况下生成递增索引吗? 由于索引单调增加,因此最好只删除索引。解决方案会有所不同吗,即: <number> <number> <number>
11 files  sed  awk  csv 

2
用文件中的“ \ n”替换“ \ r \ n”的最快,最核心的方法?
我想这tr是一个更核心的方法,因此可能是一种替换给定文件中内容的更快方法。 但是tr只能替换相等数量的字符。含义... 2个字符只能替换为2个字符,这意味着替换 \r\n通过\n是不可能的tr 下一个最佳选择是sed什么? 是sed最核心和最快捷的方式来代替\r\n用\n在一个文件中给出的缺乏TR能力? 如果可能,请举一个例子。
11 sed  replace  tr 

3
一次替换多个字符串
我正在寻找一种使用通用Unix工具(bash,sed,awk或perl)用具体值替换模板文件中占位符字符串的方法。重要的是,一次更换即可完成更换,也就是说,对于另一次更换,不得考虑已经扫描/更换的物品。例如,这两次尝试均失败: echo "AB" | awk '{gsub("A","B");gsub("B","A");print}' >> AA echo "AB" | sed 's/A/B/g;s/B/A/g' >> AA 在这种情况下,正确的结果当然是BA。 通常,该解决方案应等效于从左至右扫描输入,以与给定替换字符串之一进行最长匹​​配,并且对于每个匹配,执行替换并从输入中的该点继续进行操作(无已读取的输入,也不应考虑执行替换操作以进行匹配)。实际上,细节并不重要,只是替换的结果从不考虑全部或部分替换。 注意我只是在寻找正确的通用解决方案。请不要提出某些输入(输入文件,搜索和替换对)失败的解决方案,但是看起来不太可能。
11 bash  sed  awk  string  replace 

9
如何打印字符串中最长的数字?
我正在寻找一种打印字符串中最长数字的方法。 例如:如果我有字符串 212334123434test233 我该如何打印 212334123434 ? 注意:我正在寻找最长的连续数字序列,而不是数字更高的值。 编辑:谢谢大家的回答。对这个问题的反应非常热烈。我将@HaukeLaging的帖子标记为可接受的答案,因为它非常适合我的具体情况,但我想指出,所有答案都同样有效。有几种不同的选择解决一个问题总是很高兴。

6
从bibtex文件中提取选定条目的脚本
我有一个很大的bibtex文件,其中包含许多条目,每个条目都具有常规结构 @ARTICLE{AuthorYear, item = {...}, item = {...}, item = {...}, etc } (在某些情况下,ARTICLE可能是一个不同的词,例如BOOK) 我想做的是编写一个简单的脚本(最好仅是一个Shell脚本)以提取具有给定AuthorYear的条目并将其放入新的.bib文件中。 我可以想象我可以通过AuthorYear识别条目的第一句,而通过单引号可以识别条目的末尾,}也许可以sed用来提取条目,但是我真的不知道该怎么做。有人可以告诉我我将如何实现这一目标吗? 可能应该是这样的 sed -n "/AuthorYear/,/\}/p" file.bib 但这由于}条目的第一项的关闭而停止,从而给出以下输出: @ARTICLE{AuthorYear, item = {...}, 因此,我需要识别出这是否}是一行中唯一的字符,并且在这种情况下,只有“ sed”停止读取。

12
过滤文本文件以删除空行的好方法是什么?
我有一个.csv文件(在Mac上),有一堆空行,例如: "1", "2", "lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum ","2","3","4" "1", "2", "lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum …

3
正则表达式和Sed / Perl:匹配在ISN之前没有另一个单词的单词
我想使用sed或perl替换前面没有特定单词的单词的所有出现。 例如,我有一个文本文件,其中包含电影情节,并且我希望将所有出现的角色姓氏替换为其名字,但前提是角色的姓氏不紧跟其姓氏。 示例文本可能如下所示: John Smith and Jane Johnson talk about Smith's car. 我希望它看起来像这样: John Smith and Jane Johnson talk about John's car. 如果我只是这样做sed 's/Smith/John/' file,那么我将有: John John and Jane Johnson talk about John's car. 在姓氏之前的名字将始终相同。我不必处理John Smith和Frank Smith。我只需要一种匹配的方法Smith,而没有John之前的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.