Questions tagged «sed»

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


7
使用sed从文件中提取一行的一部分
我想从文件中读取一行的一部分。例如: POP3_SERVER_NAME =本地主机 我只想localhost使用sed 返回。 这段文字在第三行。我这样做是为了提取行: sed -n '3p' installation.sh 如何仅提取localhost零件?
18 sed 

5
合并两个列表,同时删除重复项
我有一个使用Busybox(OpenWRT)的嵌入式Linux系统-因此命令受到限制。我有两个看起来像的文件: 第一个档案 aaaaaa bbbbbb cccccc mmmmmm nnnnnn 第二档 mmmmmm nnnnnn yyyyyy zzzzzz 我需要将这2个列表合并为1个文件,并删除重复项。 我没有差异(空间有限),所以我们得到使用的伟大awk,sed和grep(或可能被包含在一个标准的Busybox的实例其他工具)。转到合并文件,如: command1 > mylist.merge command2 mylist.merge > originallist 完全可以。它不必是单行命令。 我正在使用的Busybox实例中当前定义的函数(默认为OpenWRT):[,[[,arping,ash,awk,basename,brctl,bunzip2,bzcat,cat,chgrp,chmod,chown,chroot,clear,cmp, cp,crond,crontab,cut,date,dd,df,dirname,dmesg,du,echo,egrep,env,expr,false,fgrep,find,free,fsync,grep,gunzip,gzip,halt,head,hexdump, hostid,hwclock,id,ifconfig,init,insmod,kill,killall,klogd,更少,ln,锁,记录器,logread,ls,lsmod,md5sum,mkdir,mkfifo,mknod,mktemp,mount,mv,nc,netmsg, netstat,nice,nslookup,ntpd,passwd,pgrep,pidof,ping,ping6,pivot_root,pkill,poweroff,printf,ps,pwd,重新启动,重置,rm,rmdir,rmmod,route,sed,seq,sh,sleep,排序,启动停止守护程序,字符串,switch_root,sync,sysctl,syslogd,tail,tar,Tee,telnet,telnetd,test,时间,顶部,触摸,tr,traceroute,true,udhcpc,umount,uname,uniq,正常运行时间,vconfig,vi,看门狗,wc,wget,其中,xargs,是,zcat
18 bash  grep  sed  awk  busybox 

2
使用sed摆脱字符<>,
我有一个包含以下内容的文件: ... ... &lt;230948203[234]&gt;, ... ... &lt;234[24]&gt;, ... .. 我想使用sed删除字符&lt; ,和&gt;从每一行 我尝试使用,sed 's/&lt;&gt;,//g'但是没有用(它没有改变任何东西)。我是否需要转义这些特殊字符。是否可以使用单个sed命令删除多个字符?
18 sed 

1
何时使用grep,更少,awk,sed [关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 3年前关闭。 我正在进入Linux的世界,在工作中,我使用的grep越来越多。通过这样做,我发现有时候这不足以满足我的需求。 grep几天前,我在苦苦挣扎,我的一位资深Linux管理员同事告诉我使用awk。我以如此快的速度震惊了我。 所以我的问题是,您什么时候选择一个使用另一个?grep如果可以awk节省时间,在上班并花费大量时间之前,我可以问自己什么问题?
17 awk  sed  grep  less 



1
删除字段值小于或等于3的行-sed或awk?
我需要删除第8个字段(列)中值等于或小于2的每一行。 我的数据如下所示: 12-31 Airport 189 379 41 49.70946503 -124.91377258 2 2880 30.8 01-01 AlberniElementary 165 331 16 49.26100922 -124.80662537 4 5760 26.1 01-09 BamfieldMarine 161 323 23 48.83490372 -125.13572693 2 2875 27.4 01-10 BamfieldMarine 161 323 23 48.83490372 -125.13572693 3 3068 38.6 我知道使用awk可以剥离所需的值并将它们打印到另一个文件,并且我知道sed可以编辑当前文件。无论哪种情况,我都需要保留原始文件。 注意:请提供您的解决方案的详尽说明。仅编写命令是不够的,请注释建议。 进一步说明:数据具有标题行,因此最可能的解决方案将需要 awk'FNR&gt; 1' 我想?
17 shell  shell-script  sed  awk  grep 

3
如何停止sed添加额外的换行符
我正在运行以下2条sed命令。第一个在我想要的位置添加换行符,第二个在我想要的位置添加换行符,但是在文件的末尾还添加了一个额外的换行符,以前没有。 sed -e 's|\&lt;LIST_G_STATEMENT&gt;|&amp;\ |g' ${XMLDIR}/statement_tmp_1.xml &gt; ${XMLDIR}/statement_tmp_2.xml sed -e 's|\&lt;/LIST_G_STATEMENT&gt;|&amp;\ |g' ${XMLDIR}/statement_tmp_2.xml &gt; ${XMLDIR}/statement_tmp_3.xml 使用od -c上的所有文件3给出了下面的输出。 statement_tmp_1.xml(\n文件末尾没有) 1314700 T A T E M E N T &gt; &lt; / L I S T _ 1314720 G _ S T A T E M E N T &gt; &lt; / …
17 sed 

7
每行重复多次
希望文件中的每一行重复固定的次数。 例如,每行重复四次: a b c 变成: a a a a b b b b c c c c 我已经进行了一些搜索,沿着反向进行的过程中有很多问题和答案,例如,将重复的行合并为单行,也许还有一些关于通过再次打印将行加倍的问题。 在C语言中这样做很容易,但是我希望我对本机命令有更多的了解,因此我不必一直使用这种一次性的方法。

4
没有前导空格的情况下如何grep?
我正在浏览大型代码库,而领先的空格和制表似乎很烦人。有什么办法摆脱它吗? grep -R "something" ./ 例如,代替: foo/bar.cpp: qwertyuiosomethingoi foo/bar/baz.h: 43rfsgsomethingdrfg bar/bar.cpp: 1234edwssomethingczd 我想得到类似的东西: foo/bar.cpp: qwertyuiosomethingoi foo/bar/baz.h: 43rfsgdsomethingrfg bar/bar.cpp: 1234edwssomethingczd 或更好: foo/bar.cpp: qwertyuisomethingooi foo/bar/baz.h: 43rfsgdrsomethingfg bar/bar.cpp: 1234edwssomethingczd

3
替换文件中的多行字符串
我有许多文件想要通过用另一个多行字符串替换一个多行字符串来更新。类似于以下内容: * Some text, * something else * another thing 我想替换为: * This is completely * different text 结果将是,替换后包含第一个文本块的文件现在将包含第二个字符串(文件的其余部分保持不变)。 问题的一部分是,我必须在文件系统中找到要更新的文件列表。我想我可以为此使用grep(尽管再次使用多行字符串不是那么容易),然后将其通过sed传送吗? 是否有捷径可寻?sed是一个选项,但是很尴尬,因为我必须添加\ n等。是否有办法说“从此文件中获取输入,在这些文件中进行匹配,然后用另一个文件的内容替换”?我可以在需要时使用python,但是我想要快速简单的方法,因此,如果有可用的实用程序,我宁愿使用它而不是编写自己的脚本(我知道该怎么做)。

12
成对删除重复行?
我今天遇到了这个用例。乍一看似乎很简单,但是随便摆弄sort,uniq,sed并awk透露,这是平凡的。 如何删除所有 成对的重复行?换句话说,如果给定行的重复数为偶数,则将其全部删除;如果重复行数为奇数,请删除除一行以外的所有行。(可以假设输入是排序的。) 干净优雅的解决方案是可取的。 输入示例: a a a b b c c c c d d d d d e 输出示例: a d e

3
使用sed替换正则表达式捕获组内容
我正在尝试以编程方式编辑我的nginx.conf文件,其中包含如下行: access_log /var/log/nginx/access.log; 我想看起来像这样: access_log /dev/stdout; 我相信正则表达式^\s*access_log([^;]*);将捕获/var/log/nginx/access.log捕获组中的部件,但是我不确定如何用sed正确替换捕获组? 我试过了 echo " access_log /var/log/nginx/access.log;" | sed 's/^\s*access_log([^;]*);/\1\\\/dev\\\/stdout/' 但我得到了错误: sed: -e expression #1, char 45: invalid reference \1 on `s' command's RHS 如果我尝试sed -r,则没有错误,但是输出不是我期望的: /var/log/nginx/access.log\/dev\/stdout 我试图对捕获组和其他方面变得聪明,而不是直接搜索“ access_log /var/log/nginx/access.log;”。如果发行版更改了默认日志文件位置。
16 sed 

8
在大文件中替换包含换行符的字符串
有谁知道基于非行的工具以某种内存有效的方式“二进制”搜索/替换字符串?也看到这个问题。 我有一个+ 2GB的文本文件,我想对其进行处理,类似于此操作: sed -e 's/&gt;\n/&gt;/g' 这意味着,我想删除a之后出现的所有换行符&gt;,但不能在其他地方删除,以便排除tr -d。 此命令(我从类似问题的答案中得到)失败,并带有couldn't re-allocate memory: sed --unbuffered ':a;N;$!ba;s/&gt;\n/&gt;/g' 那么,还有其他方法不求助于C吗?我讨厌perl,但愿意在这种情况下例外:-) 我不确定数据中是否会出现任何字符,因此\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.