Questions tagged «sed»

“ sed”(“流编辑器”)是一个Unix实用程序,用于解析和转换文本文件。

2
使用Sed Ampers和Array替换
我试图使用sed的&符号替换原始字符串,然后从数组中读取,但它无法正常工作。我只是得到错误:'操作数预期(错误标记是“&”)'。 以下是相关的代码行: gawk -F '\t' '{ print $5"\t"$1"\t"$2"\t"$3"\t"$4 }' $TEMPFILE | sed "s/^[0-9]\+/${CATEGORY[&]}/g" 第一个gawk语句在行的开头生成一个两位数字。如果我用手动替换sed语句中的&符号,一切正常。我真的很感激一些帮助。
1 linux  bash  sed 

2
sed在最后一行之前插入变量
我想在最后一行之前插入一个变量。 这是我的档案。 $ cat file.txt one two three four five 当我尝试不使用变量时,它工作正常。 $ sed -i '$i name' file.txt $ cat file.txt one two three four name five 当我使用变量时,它不起作用。我尝试了双引号和反斜杠的不同组合。 $ NAME=name $ sed -i '$i "$NAME"' file.txt $ cat file.txt one two three four "$NAME" five
1 bash  sed 


1
从vim搜索转换为sed
我有很长的Latex文档,其中包含很多部分。我想检查文档的所有部分是否都已填写。因此,我会随时搜索以'}'结尾的部分标题,某些空格,然后以'\'开头的下一个部分的内容(这与完美的搜索,但对我来说很好。) 在vim中我使用 /}\_s\\ 哪个工作正常。但是,我正在努力在命令行上复制搜索。 我通常会使用grep,但这是一个多行匹配,因此就可以了。我对sed的经验很少,但是我已经尝试过: sed -e '/\}\s\\/p' file.tex 它给了我一切(大概是因为它正在打印匹配的多行-整个文件) 我如何才能改善此sed命令,使其仅给我例如比赛的第一行?
1 command-line  vim  grep  sed 

1
Ex / vim ex-mode和sed是否属于同一任务的不同实用程序或两个不同程序
我知道sed(流编辑器)是一种非交互式编辑器,可用于脚本编写和批处理。我也了解ex及其vim调用:ex-mode是用于非交互式文本处理的行编辑器。我的问题不是关于哪个更好或更有用的观点之一,而是关于ex / ex模式是否有任何预期的用例或优势将其与sed区分开。我问的原因是通过忽略赞成sed的ex模式来确定我是否错过了。提前致谢。
1 command-line  vim  sed 

1
我想在Apache错误日志中获取唯一条目的计数
查看Apache的日志文件时,会重复出现许多错误消息。我想找出哪些错误消息是最常见的,哪些是唯一的。 我想要一个简单的脚本,可以为我提供许多不同的独特行。 我知道Perl / Python / etc,但是我更喜欢使用内置工具,例如cut/ find/ grep/ sed等。 我可以使用获得一个简单的条目列表sed。下面显示了唯一的错误消息列表: $ sed -e "s/\[.*\]\([^:]*\)\(.*\)/\1/" error.sml.log | sort -u Apache configured -- resuming normal operations client denied by server configuration Digest File does not exist request failed 这可以计算出现的次数。它只是没有用,因为它没有显示计数与什么相关: $ sed -e "s/\[.*\]\([^:]*\)\(.*\)/\1/" error.sml.log | sort -u | xargs -I{} grep …

1
使用Sed.exe修改名称不以特定字符开头的文件
我是这个人的新手,所以我希望得到别人的帮助。 我在Windows Vista 32位版本上这样做。 我的桌面上有2个文件夹:folder_a(带有sed.exe)和带有这些文件的folder_b: sand.txt tree.txt chair.txt XYZ-fork.txt XYZ-spoon.txt 如果我使用此字符串运行批处理文件: call "C:\Users\X\Desktop\folder_a\sed.exe" -i "1c table-zeta" "C:\Users\X\Desktop\folder_b\*xyz*.txt 我能够更改文件名包含xyz的那些文件的第一行。 现在我要做的是更改文件名不包含xyz的那些文件的第一行;在这种情况下只有sand.txt,tree.txt和chair.txt。 我该怎么做?


2
sed命令返回“sed:替换表达式中的错误选项”
例如: - 我有一个名为file.txt的文件 $ cat file.txt $key 我有一个环境变量,例如:文本文件中的$ key 并且假设$ key = 1234,所以我可以用下面的命令替换该值 sed -i 's/$key/'"$key"'/' file.txt 它变成了 $ cat file.txt 1234 我的问题是,如果值为 $key = 1/2/3/4 我无法运行以下命令 sed -i 's/$key/'"$key"'/' file.txt 它会给出错误 sed: bad option in substitution expression 因为斜线正在破碎。我可以通过直接给出值来解决它,但我不想以这种方式使用它。 sed -i 's/$key/1\/2\/3\/4/' file.txt

2
调试输出
我试图加速导入一个包含完整.sql文件的文件夹的大型数据集 ls -rS *.sql | parallel -j16 mysql -uusername -ppassword dbname "<" 运行后不久,我收到一个错误: ERROR 1146 (42S02) at line 65: Table 'dbname.some_table' doesn't exist ERROR 1146 (42S02) at line 69: Table 'dbname.some_table_other' doesn't exist 是否有一种简单的方法来修改此命令行arg以找出生成此错误的文件? 我已经尝试过在所有文件的第65-69行运行sed的脚本,但是有太多的结果要知道。一旦我确定哪个sql生成了错误,我就可以删除它并重新导入它。 解决:用过 ls -rS *.sql | xargs grep -i "dbname.some_table" | less 追溯过早被调用的地方

1
Sed替换存储在变量中的行
我需要找到一个开头的行,mysql.unmetric.twt.url并用存储在变量ip中的行替换整行。 ip="mysql.unmetric.twt.url=jdbc:mysql://ec2-a-b-c-d.compute-1.amazonaws.com:3306/unmetric? jdbcCompliantTruncation=false&useUnicode=yes&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true" 如何使用sed实现这一目标?
shell  sed 

3
使用sed从空格分隔的字符串中解析特定值
我有一个文件,其中包含以下行: 0 6 973 1346 2318 456 431 93 58 1 1 0 0 0 0 我想提取第1,第4和第5个数字并将它们保存在bash中的变量中以供进一步使用。在上面的例子中,我想要的值是'0','1346'和'2318'。 我想用sed但我不知道怎么做。任何其他方式也欢迎。 PS。谢谢你的答案,以下是我现在使用的: for fn in $(cat filelist); do more $fn | \ while read str; do echo $str var=$(echo $str | awk -F" " '{print $1,$2,$3,$4,$5}') set -- $var echo $1 echo $4 …
bash  sed 


2
Bash Sed管道指挥单线
我正在尝试从我的所有接口转储输出。这是我到目前为止所得到的: ifconfig | awk '{print $1}' | sed s'/.$//' 我希望有类似的东西: ifconfig | awk '{print $1}' | sed s'/.$//' | tcpdump -i {} -c 1 其中{}是管道中传递的内容。 更新: 这是ifconfig的示例输出: em0:encaps:ether; 框架:以太 标志= 0x3 /为0x8000 curr media:i802 2:0:0:1:0:4 em0.0:flags = 0x8000 inet primary mtu 1500 local = 129.16.0.1 dest = 128.0.0.0 / 2 …
sed  pipe 

1
使用'if'基于条件运行命令的awk脚本
我这里有一段代码基本上是一个名为'srcip'的文件(它只是一个IP地址列表),并将它与我的'〜/ db'文件进行比较,该文件只是我们拥有的服务器的制表符分隔的IP HOSTNAME数据库在我们的环境中。目标是获取'srcip'文件并将其与〜/ db文件中的内容进行匹配以获取主机名。它运行正常但由于DHCP问题,有很多IP地址故意不在〜/ db文件中,因此我们需要使用该host命令进行真正的主机查找。我想要的是基本上在这个awk代码中放置一个if语句来检查数据库中的IP是否不匹配,然后在该ip上运行host命令并给我输出。我怎么能在这里做到这一点? awk 'FNR==NR {a[$1]=$2; next} $1 in a && a[$1]!=$2 {print $1, a[$1], $2}' OFS="\t" srcip ~/db 我知道awk可以使用if下面这样的语句来检查是否有任何系统用户有/ bin / bash shell: awk -F':' '{ if ($3 < '500' && $7 != "/bin/bash" ) print $0 }' /etc/passwd 如上所述,我需要使用能够快速解析这些数据的东西,例如awk或sed,而不是依赖任何循环。请记住,我已经可以使用while循环执行此操作但是考虑到while循环的性质,它会逐行解析它并且我们使用起来很慢,因为我们有近100,000个IP可以一次解析(如果不是更多)。对于2000行,我可以运行这段代码但是这不是我想要做的: #!/bin/bash while read this_IP_address do db_host=$(grep "^$this_IP_address" …

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.