Questions tagged «sed»

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

1
查找并保存(搜索并替换)
我在Mac上使用以下命令: $find . -name “*.java” -exec sed -i ’s/foo/bar/g’ {} \; 似乎没有效果。 我在目录中有两个以.java结尾的文件,它们都包含foo文本。我想念什么吗? 编辑:从评论请求的结果 [aafghani-03:~/test amirafghani]$ find . -name "*.java" -exec sed -i 's/foo/bar/g' {} \; sed: 1: "./bar.java": invalid command code . sed: 1: "./foo.java": invalid command code .
26 find  sed  osx 

1
从管道读取时,为什么“ sed q”的工作方式有所不同?
这个问题是从Server Fault 迁移过来的,因为可以在Unix&Linux Stack Exchange上回答。 迁移 3年前。 我创建了一个名为“ test”的测试文件,其中包含以下内容: xxx yyy zzz 我运行了命令: (sed '/y/ q'; echo aaa; cat) < test 我得到: xxx yyy aaa zzz 然后我跑了: cat test | (sed '/y/ q'; echo aaa; cat) 并得到: xxx yyy aaa 题 sed读取并打印,直到遇到带有'y'的行,然后停止。在第一种情况下,而不是第二种情况下,cat读取并打印其余部分。 有人可以解释这种行为差异背后的现象是什么吗? 我也注意到它在Ubuntu 16.04和Centos 6中是这样工作的,但是在Centos 7中,这两个命令都不会输出'zzz'。
25 sed  pipe 


4
如何在两个时间戳之间提取日志
我想提取两个时间戳之间的所有日志。有些行可能没有时间戳,但我也想要这些行。简而言之,我希望每一行都落在两个时间戳下。我的日志结构如下: [2014-04-07 23:59:58] CheckForCallAction [ERROR] Exception caught in +CheckForCallAction :: null --Checking user-- Post [2014-04-08 00:00:03] MobileAppRequestFilter [DEBUG] Action requested checkforcall 假设我要提取2014-04-07 23:00和之间的所有内容2014-04-08 02:00。 请注意,日志中可能没有开始时间戳或结束时间戳,但是我希望这两个时间戳之间的每一行。

10
如何在EOF上删除多个换行符?
我的文件以一个或多个换行符结尾,并且应该仅以一个换行符结尾。如何使用Bash / Unix / GNU工具做到这一点? 错误文件示例: 1\n \n 2\n \n \n 3\n \n \n \n 示例更正的文件: 1\n \n 2\n \n \n 3\n 换句话说:EOF和文件的最后一个非换行符之间应该只有一个换行符。 参考实施 读取文件内容,切掉一个换行符,直到末尾再没有两个换行符,将其写回: #! /bin/python import sys with open(sys.argv[1]) as infile: lines = infile.read() while lines.endswith("\n\n"): lines = lines[:-1] with open(sys.argv[2], 'w') as outfile: for line in lines: …
25 bash  sed  awk  ed 


2
从变量中删除所有空格,制表符,换行符等?
这是我遇到的错误,由于一个变量的值应该为2(我使用a来获取)而失败select * from tabel。我在该变量中得到空格。 + 0 != 2 ./setjobs[19]: 0: not found. 如何从该变量中删除所有这些空格或换行符?灿tr,sed或什么帮助? 这是我在做什么: set_jobs_count=$(echo "set heading off; select count(*) from oppar_db where ( oppar_db_job_name, oppar_db_job_rec ) in ($var) ;" | \ sqlplus -s ${OP_ORA_USER}/${OP_ORA_PASS}@$OPERATIONAL_DB_NAME) 如建议的那样工作: | sed 's/[[:space:]]//g' 但是我仍然获得像这样的值: set_jobs_count= 2
25 shell  sed  tr  whitespace  newlines 

8
如何在Linux中删除文件的最后一列
我想删除txt文件的最后一列,但我不知道列号是什么。我该怎么办? 例: 输入: 1223 1234 1323 ... 2222 123 1233 1234 1233 ... 3444 125 0000 5553 3455 ... 2334 222 我希望我的输出是: 1223 1234 1323 ... 2222 1233 1234 1233 ... 3444 0000 5553 3455 ... 2334


9
如何从文件中删除每隔两行?
文件: Data inserted into table. Total count 13 No error occurred Data inserted into table. Total count 45 No error occurred Data inserted into table. Total count 14 No error occurred Data inserted into table. Total count 90 No error occurred 预期输出文件: Data inserted into table. Total count 13 Data …


3
提取与“ sed”匹配的正则表达式,而不打印周围的字符
对于所有在那里的“ sed”医生: 您如何获得“ sed”来提取在一行中匹配的正则表达式? 换句话说,我只想删除包含行中所有不匹配字符的正则表达式对应的字符串。 我尝试使用如下所示的反向引用功能 regular expression to be isolated gets `inserted` here | v sed -n 's/.*\( \).*/\1/p 这适用于某些表达式,例如 sed -n 's/.*\(CONFIG_[a-zA-Z0-9_]*\).*/\1/p 整齐地提取所有以'CONFIG_ ....'开头的宏名(在某些* .h文件中找到),并将它们全部逐行打印出来 CONFIG_AT91_GPIO CONFIG_DRIVER_AT91EMAC . . CONFIG_USB_ATMEL CONFIG_USB_OHCI_NEW . e.t.c. 但是上面的东西分解为 sed -n 's/.*\([0-9][0-9]*\).*/\1/p 这总是返回单个数字,例如 7 9 . . 6 而不是提取一个连续的数字字段,例如。 8908078 89670890 . . …
24 sed 

3
如何在sed的正则表达式中使用[\ w] +?
我在Windows上,但我想我的问题仍然正确地放在这里。 C:\Users\User>grep --version GNU grep 2.6.3 C:\Users\User>sed --version GNU sed version 4.2.1 我注意到以下工作原理(输出here): echo here | grep -E "\w+" echo here | grep -E "[her]+" 但是,这不起作用(不输出任何内容): echo here | grep -E "[\w]+" 再次这样做(输出here): echo here | grep -P "[\w]+" 我想这[\w]是Perl正则表达式特有的。那是对的吗? 所以,让我们谈谈sed。这有效(输出gone): echo here | sed -r "s/\w+/gone/" echo here | …


4
sed在OSX插入的特定行
所以我在Linux上使用'sed'已有一段时间了,但是由于'POSIX sed'和'GNU sed'的差别很小,因此尝试在OSX上使用它有点困难。目前,我正在努力在特定行号后插入一行文本。(在这种情况下,第4行) 在linux上,我会这样做: sed --in-place "4 a\ mode '0755'" file.txt 因此,在OSX上,我尝试了以下操作: sed -i "" "4 a\ mode '0755'" file.txt 但是,这总是给我“命令末尾\后面的多余字符”错误。有什么主意吗?我有错字吗?还是我不了解sed版本之间的另一个区别?
24 sed  osx  posix  gnu 

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.