Tag: sed

sed中“hold space”和“pattern space”的概念

我很困惑sed中的两个概念:保持空间和模式空间。 有人可以帮助解释他们吗? 以下是手册的一部分: h H Copy/append pattern space to hold space. g G Copy/append hold space to pattern space. n N Read/append the next line of input into the pattern space. 这六个命令让我很困惑。

在bash中用(下划线)replace空白的最简单的方法

最近我不得不写一些在XenServer中分析虚拟机的脚本,因为虚拟机的名字大多是在Windows XP或Windows Server 2008的空白处,所以我不得不修剪这些空格,并用下划线_replace它们。 我发现一个简单的解决scheme,使用sed,这是一个伟大的工具,当涉及到string操作。 echo "This is just a test" | sed -e 's/ /_/g' 回报 This_is_just_a_test

如何一行一行地合并两个文件

我有两个文件( file1.txt和file2.txt ),文件只是例子。 如何合并这两个文件,以创build文件 – merge_files.txt作为例子3 我现在写ksh脚本,所以合并可以用ksh,awk,sed,perl,one liner等来完成 背景 – 为什么我需要合并文件:我的目标是将旧文件 (存在于第一个字段中)重命名为NEW文件 (存在于第二个字段中), 例1 more file1.txt /etc/port1-192.9.200.1-255.555.255.0 /etc/port2-192.9.200.1-255.555.255.0 /etc/port3-192.9.200.1-255.555.255.0 /etc/port4-192.9.200.1-255.555.255.0 /etc/port5-192.9.200.1-255.555.255.0 . . . . 例题 more file2.txt /etc/port1-192.90.2.1-255.555.0.0 /etc/port2-192.90.2.1-255.555.0.0 /etc/port3-192.90.2.1-255.555.0.0 /etc/port4-192.90.2.1-255.555.0.0 /etc/port5-192.90.2.1-255.555.0.0 . . . . 示例3 more merge_files.txt /etc/port1-192.9.200.1-255.555.255.0 /etc/port1-192.90.2.1-255.555.0.0 /etc/port2-192.9.200.1-255.555.255.0 /etc/port2-192.90.2.1-255.555.0.0 /etc/port3-192.9.200.1-255.555.255.0 /etc/port3-192.90.2.1-255.555.0.0 /etc/port4-192.9.200.1-255.555.255.0 /etc/port4-192.90.2.1-255.555.0.0 /etc/port5-192.9.200.1-255.555.255.0 /etc/port5-192.90.2.1-255.555.0.0 . . . . . […]

sed初学者:改变文件夹中的所有事件

我需要做一个正则expression式查找并replace文件夹(及其子文件夹)中的所有文件。 什么是Linux shell命令来做到这一点? 例如,我想在所有文件上运行这个文件,并用新的replace文本覆盖旧文件。 sed 's/old text/new text/g'

有sed忽略不匹配的行

如何根据expression式使sedfilter匹配行,而忽略不匹配的行,而不是让它们打印? 作为一个实例,我想在一组文件上运行scalac (Scala编译器),并从其-verbose输出中读取创build的.class文件。 scalac -verbose输出一堆消息,但是我们只对那些forms感兴趣[wrote some-class-name.class] 。 我现在正在做的是( |& bash 4.0的方式来pipe理stderr到下一个程序): $ scalac -verbose some-file.scala … |& sed 's/^\[wrote \(.*\.class\)\]$/\1/' 这将从我们感兴趣的消息中提取文件名,但也会让所有其他消息不变地通过! 当然,我们可以这样做: $ scalac -verbose some-file.scala … |& grep '^\[wrote .*\.class\]$' | sed 's/^\[wrote \(.*\.class\)\]$/\1/' 它的工作原理非常像解决真正的问题,这就是如何指示sed忽略来自input的不匹配的行。 那么我们该怎么做呢?

sed与文字string – 没有input文件

这应该很容易:我想运行sed针对文字string,而不是input文件。 如果你想知道为什么,例如编辑存储在variables中的值,不一定是文本数据。 当我做: sed 's/,/','/g' "A,B,C" A,B,C是我想要改成A','B','C的文字 我明白了 Can't open A,B,C 好像它认为A,B,C是一个文件。 我试图pipe道回声: echo "A,B,C" | sed 's/,/','/g' 我得到一个提示。 什么是正确的方法来做到这一点?

如何使用sed从string中提取文本?

我的示例string如下所示: This is 02G05 a test string 20-Jul-2012 现在从上面的string我想提取02G05 。 为此,我尝试了以下与sed的正则expression式 $ echo "This is 02G05 a test string 20-Jul-2012" | sed -n '/\d+G\d+/p' 但是上面的命令不会打印任何东西,我相信它的原因是无法与我提供给sed的模式匹配。 所以,我的问题是我在这里做错了什么,以及如何纠正它。 当我用python试试上面的string和模式时,我得到了我的结果 >>> re.findall(r'\d+G\d+',st) ['02G05'] >>>

如何使用shell(awk,sed,whatever)删除文件中的前两列

我有一个在每一行有很多行的文件有很多列(字段)以空格分隔“”每行的列数是不同的我想删除前两列如何?

find两个文本文件每行一个项目之间的区别

我有两个文件: 文件1 dsf sdfsd dsfsdf 文件2 ljljlj lkklk dsf sdfsd dsfsdf 我想显示文件2中的内容,但不是文件1中的内容,所以文件3应该看起来像 ljljlj lkklk

如何在GREP,REGEX或PERL模式下提取string

我有一个这样的文件: <table name="content_analyzer" primary-key="id"> <type="global" /> </table> <table name="content_analyzer2" primary-key="id"> <type="global" /> </table> <table name="content_analyzer_items" primary-key="id"> <type="global" /> </table> 我需要提取“name =”后面的引号,即content_analyzer,content_analyzer2和content_analyzer_items。 我在一个Linux机器上这样做,所以使用sed,perl,grep或bash的解决scheme是好的。