Questions tagged «sed»

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

3
用一个空格替换句子结尾后两个空格的所有出现
我陷入了sed命令包含正则表达式的困境。 问:我想用一个空格代替句子结尾后两个空格的所有出现。 这是我所做的: sed 's/^ $/^$/' file 句子结束后,它没有用一个空格代替两个空格。 我得到的输出: This is the output. Hello Hello 我想要的输出: This is the output. Hello Hello

2
Grep找到正确的行,用sed更改内容,然后将其放回原始文件中?
我正在尝试更改文件中特定行上的单个单词,但是将所有单词连接在一起时遇到了一些麻烦。 基本上,在文件的一行上有一个关键字“ firmware_revision”,并且在这一行(并且只有这一行)上,我想用“生产”一词代替“测试”一词。 所以我可以这样做: grep 'firmware_revision' myfile.py | sed 's/test/production' 这将挑选出我想要的行并执行替换,但是我不知道如何将新行插入原始文件以替换旧行。我显然不能仅仅将其重定向回文件,那么该怎么办? 即使我使用临时文件,通过使用临时grep文件,我也需要丢失文件中的所有其他数据,因此,我不再只能将所有文件重定向到临时文件,而是用临时文件替换原始文件。 编辑-有人要求更多信息 可以说我有一个像这样的文件 [ ('key_name1', str, 'value1', 'Description'), ('key_name2', str, 'value2', 'Description'), ('key_name3', str, 'value3', 'Description'), ('firmware_revision', str, 'my-firmware-name-test', 'Firmware revision name') ] 现在,我想编写一个脚本(最好是单行代码),该脚本将找到包含“ firmware_revision”的行,并将该行中“ test”一词的所有实例更改为“ production”。“测试”一词可能在该文件的其他位置,我不希望更改这些内容。为了清楚起见,我想将上面的行更改为 ('firmware_revision', str, 'my-firmware-name-production', 'Firmware revision name') 我该怎么做呢?

7
grep来自file2的确切行块(file1的内容)
我有两个文件,file1和file2。 的样本内容file1是: A B C D E F G H 的内容file2如下: A B few other lines E F few more other lines A B C D E F G H few more other lines G H 因此,我只想搜索整个file1内容块file2。这意味着输出应仅包含以下行: A B C D E F G H 请注意:-只有合并在一起的行才应该是输出的一部分。

3
如何用sed替换多行代码?
我有一个很大的文件,里面有特殊字符。那里有一个多行代码,我想替换为sed。 这个: text = "\ ------ ------\n\n\ This message was automatically generated by email software\n\ The delivery of your message has not been affected.\n\n\ ------ ------\n\n" 需要变成这样: text = "" 我尝试了以下代码,但没有运气: sed -i '/ text = "*/ {N; s/ text = .*affected.\./ text = ""/g}' /etc/exim.conf 它不会替换任何东西,也不显示任何错误消息 我一直在玩它,但是我尝试的所有方法都不起作用。

5
如何将/ path / to / file缩写为/ p / t / file
我正在寻找一种优雅的单行代码(例如awk),它将使用每个父级/中间级的第一个字符,但使用完整的基名来缩短Unix路径的字符串。通过示例更容易显示: /path/to/file → /p/t/file /tmp → /tmp /foo/bar/.config/wizard_magic → /f/b/./wizard_magic /foo/bar/.config/wizard_magic→ /f/b/.c/wizard_magic 鉴于下面@MichaelKjörling和@ChrisH的优点,本示例说明了当第一个字符为点时我们如何显示前两个字符。
9 sed  awk  string 

3
sed-如何将每个第三个单词大写?
鉴于: main_east_library main_west_roof main_north_roof minor_south_roof 我怎样才能使用sed(特别是,不awk,tr等等)来创建: main_east_Library main_west_Roof main_north_Roof minor_south_Roof 就像是: $ echo "main_west_library main_west_roof main_north_roof minor_south_roof" | sed 's_\3_upcase(\3)_' 尽管这给出了: sed: -e expression #1, char 16: Invalid back reference
9 sed 

5
合并两个文件中的备用行
文件1: .tid.setnr := 1123 .tid.setnr := 3345 .tid.setnr := 5431 .tid.setnr := 89323 文件2: .tid.info := 12 .tid.info := 3 .tid.info := 44 .tid.info := 60 输出文件: .tid.info := 12 .tid.setnr := 1123 .tid.info := 3 .tid.setnr := 3345 .tid.info := 44 .tid.setnr := 5431 .tid.info := 60 .tid.setnr := …

7
如何在不分割多行记录的情况下有效地分割大型文本文件?
我有一个大的文本文件(gz'ed时为〜50Gb)。该文件包含4*N行或N记录;即每条记录由4行组成。我想将此文件拆分为4个较小的文件,每个文件的大小约为输入文件的25%。如何在记录边界分割文件? 天真的方法是zcat file | wc -l获取行数,将其除以4,然后使用split -l <number> file。但是,这会翻遍文件两次,并且行计数非常慢(36分钟)。有没有更好的办法? 这很接近,但不是我想要的。接受的答案也会进行行计数。 编辑: 该文件包含fastq格式的测序数据。两条记录如下所示(匿名): @NxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxGCGA+ATAGAGAG xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxTTTATGTTTTTAATTAATTCTGTTTCCTCAGATTGATGATGAAGTTxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + AAAAA#FFFFFFFFFFFFAFFFFF#FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF<AFFFFFFFFFFAFFFFFFFFFFFFFFFFFFF<FFFFFFFFFAFFFAFFAFFAFFFFFFFFAFFFFFFAAFFF<FAFAFFFFA @NxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxGCGA+ATAGAGAG xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxCCCTCTGCTGGAACTGACACGCAGACATTCAGCGGCTCCGCCGCCxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx + AAAAA#FFFFF7FFFFFFAFFFFA#F7FFFFFFFFF7FFFFFAF<FFFFFFFFFFFFFFAFFF.F.FFFFF.FAFFF.FFFFFFFFFFFFFF.)F.FFA))FFF7)F7F<.FFFF.FFF7FF<.FFA<7FA.<.7FF.FFFAFF 每条记录的第一行以开头@。 编辑2: zcat file > /dev/null 需要31分钟。 EDIT3: Onlye第一行以开头@。其他任何人都不会。看这里。记录需要保持秩序。向结果文件中添加任何内容都是不正确的。

4
sed替代搜索和替换很长的行
我有一个程序生成的文件,该文件未在记录的末尾添加换行符。我想在记录之间添加换行符,我可以使用一个简单的sed脚本来做到这一点: sed -e 's/}{/}\n{/g' 问题在于输入文件的大小为数GB,因此sed的输入行的长度为数GB。sed尝试在内存中保留一行,在这种情况下不起作用。我尝试了该--unbuffered选项,但这似乎会使它变慢,并且无法正确完成。
9 sed 

2
sed:将整个文件读入模式空间而不会在单行输入中失败
将整个文件读入模式空间对于替换换行符&c很有用。并且有很多实例建议以下几点: sed ':a;N;$!ba; [commands...]' 但是,如果输入仅包含一行,则失败。 例如,在两行输入的情况下,每一行都要执行替换命令: $ echo $'abc\ncat' | sed ':a;N;$!ba; s/a/xxx/g' xxxbc cxxxt 但是,对于单行输入,不执行替换: $ echo 'abc' | sed ':a;N;$!ba; s/a/xxx/g' abc 如何编写sed命令一次读取所有输入而又没有此问题的命令?
9 sed  newlines 


5
搜索字符串并打印范围内前后的所有内容
我有这个文件: sometext1{ string1 } sometext2{ string2 string3 } sometext3{ string4 string5 string6 } 我想在该文件中搜索特定的字符串,并在此字符串之前将所有内容打印到开头,{并在此字符串之后将所有内容打印到结尾}。我尝试使用sed实现此目的,但是如果尝试打印/{/,/string2/sed 范围内的所有内容,例如sed会打印以下内容: sometext1{ string1 } sometext2{ string2 sometext3{ string4 string5 string6 } 如果我搜索字符串“ string2”,则需要输出为: sometext2{ string2 string3 } 谢谢。

8
如何将行追加到上一行?
我有一个日志文件,需要对其进行分析和分析。文件包含类似以下内容: 文件: 20141101 server contain dump 20141101 server contain nothing {uekdmsam ikdas jwdjamc ksadkek} ssfjddkc * kdlsdl sddsfd jfkdfk 20141101 server contain dump 基于上述情况,我必须检查起始行是否不包含日期或我必须附加到前一行的数字。 输出文件: 20141101 server contain dump 20141101 server contain nothing {uekdmsam ikdas jwdjamc ksadkek} ssfjddkc * kdlsdl sddsfd jfkdfk 20141101 server contain dump


2
从文本文件中删除未知的Unicode字符-sed,其他bash / shell方法
我需要在具有相同名称的某些文件中搜索并替换所有出现的未知字符。 用vi打开此类文件,我读取了该字符的<91>代码。用nano打开它们,我在钻石(黑色隆隆声)中看到一个“问号”。 我想用引号(')代替这样的未知字符。我正在尝试许多运气不佳的方法。 我试过了: find ./ -name filename.txt -exec perl -i~ -pe "s/\x91/'/" {} \; find ./ -name filename.txt -exec sed -i "s/\x91/'/g" {} \; 编辑 有关该字符的更多信息: Hexadecimal: 91 68 74 74 Decimal: 145 104 116 116 Octal: 221 150 164 164 Binary: 10010001 01101000 01110100 01110100 LC_ALL=C sed -n …

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.