草庐IT

regex - sed - 注释与特定字符串匹配且尚未注释掉的行

我有以下测试文件AAABBBCCC使用下面的sed我可以注释掉BBB行。#sed-e'/BBB/s/^/#/g'-ifile如果该行的开头没有#,我只想注释掉它。#sed-e'/^#/!/BBB/s/^/#/g'filesed:-eexpression#1,char7:unknowncommand:`/'有什么想法可以实现这一点吗? 最佳答案 假设您没有包含多个#的任何行,这将起作用:sed-e'/BBB/s/^#*/#/'-ifile注意:您不需要/g,因为您每行最多进行一次替换。 关

linux - 如何在 unix 中删除文件的最后一个字符?

假设我有一些任意的多行文本文件:sometextmoretextlastline如何在不使文本文件无效的情况下仅删除文件的最后一个字符(e,而不是换行符或null)? 最佳答案 一种更简单的方法(输出到标准输出,不更新输入文件):sed'$s/.$//'somefile$是一个仅匹配最后输入行的Sed地址,从而导致执行以下函数调用(s/.$//)仅在最后一行。s/.$//用空字符串替换(在本例中为last)行的最后一个字符;即,有效地删除最后一个字符。(换行前)就行了。.匹配行中的任何字符,并在其后跟$将匹配锚定到行尾;请注意在这个

linux - 如何在 unix 中删除文件的最后一个字符?

假设我有一些任意的多行文本文件:sometextmoretextlastline如何在不使文本文件无效的情况下仅删除文件的最后一个字符(e,而不是换行符或null)? 最佳答案 一种更简单的方法(输出到标准输出,不更新输入文件):sed'$s/.$//'somefile$是一个仅匹配最后输入行的Sed地址,从而导致执行以下函数调用(s/.$//)仅在最后一行。s/.$//用空字符串替换(在本例中为last)行的最后一个字符;即,有效地删除最后一个字符。(换行前)就行了。.匹配行中的任何字符,并在其后跟$将匹配锚定到行尾;请注意在这个

linux - 在 Linux 的文本文件中用逗号替换空格

我需要编辑一些文本文件(sar的输出)并将它们转换为CSV文件。我需要使用sed或awk函数(Linux中的简单shell脚本)更改每个空格(可能是输出中数字之间的制表符)。谁能帮帮我?我使用的每个命令根本没有更改文件;我试过gsub. 最佳答案 tr''','output用逗号替换每个空格,如果需要,可以使用-s标志(挤压重复)进行传递,它将SET1(空格)中列出的重复字符的每个输入序列替换为单个该字符的出现。在替换标签后使用挤压重复:tr-s'\t'output 关于linux-在L

linux - 在 Linux 的文本文件中用逗号替换空格

我需要编辑一些文本文件(sar的输出)并将它们转换为CSV文件。我需要使用sed或awk函数(Linux中的简单shell脚本)更改每个空格(可能是输出中数字之间的制表符)。谁能帮帮我?我使用的每个命令根本没有更改文件;我试过gsub. 最佳答案 tr''','output用逗号替换每个空格,如果需要,可以使用-s标志(挤压重复)进行传递,它将SET1(空格)中列出的重复字符的每个输入序列替换为单个该字符的出现。在替换标签后使用挤压重复:tr-s'\t'output 关于linux-在L

linux - sed中 'Hold space'和 'Pattern space'的概念

我对sed中的两个概念感到困惑:保持空间和模式空间。有人可以帮忙解释一下吗?这是手册的一个片段:hHCopy/appendpatternspacetoholdspace.gGCopy/appendholdspacetopatternspace.nNRead/appendthenextlineofinputintothepatternspace.这六个命令真的让我很困惑。 最佳答案 当sed逐行读取文件时,当前已读取的行被插入到pattern缓冲区(模式空间)中。模式缓冲区就像临时缓冲区,即存储当前信息的暂存器。当您告诉sed打印时,

linux - sed中 'Hold space'和 'Pattern space'的概念

我对sed中的两个概念感到困惑:保持空间和模式空间。有人可以帮忙解释一下吗?这是手册的一个片段:hHCopy/appendpatternspacetoholdspace.gGCopy/appendholdspacetopatternspace.nNRead/appendthenextlineofinputintothepatternspace.这六个命令真的让我很困惑。 最佳答案 当sed逐行读取文件时,当前已读取的行被插入到pattern缓冲区(模式空间)中。模式缓冲区就像临时缓冲区,即存储当前信息的暂存器。当您告诉sed打印时,

linux - 带有文字字符串的 sed——不是输入文件

这应该很简单:我想针对文字字符串而不是输入文件运行sed。如果您想知道为什么,例如编辑存储在变量中的值,而不一定是文本数据。当我这样做时:sed's/,/','/g'"A,B,C"其中A,B,C是我要更改为A','B','C的文字我明白了Can'topenA,B,C好像它认为A,B,C是一个文件。我尝试通过管道将其用于echo:echo"A,B,C"|sed's/,/','/g'我得到一个提示。正确的做法是什么? 最佳答案 你有一个单引号冲突,所以使用:echo"A,B,C"|sed"s/,/','/g"如果使用bash,你也可以这

linux - 带有文字字符串的 sed——不是输入文件

这应该很简单:我想针对文字字符串而不是输入文件运行sed。如果您想知道为什么,例如编辑存储在变量中的值,而不一定是文本数据。当我这样做时:sed's/,/','/g'"A,B,C"其中A,B,C是我要更改为A','B','C的文字我明白了Can'topenA,B,C好像它认为A,B,C是一个文件。我尝试通过管道将其用于echo:echo"A,B,C"|sed's/,/','/g'我得到一个提示。正确的做法是什么? 最佳答案 你有一个单引号冲突,所以使用:echo"A,B,C"|sed"s/,/','/g"如果使用bash,你也可以这

linux - 如何从匹配行之后删除文件中的所有行?

我有一个由多行文本组成的文件:ThefirstlineThesecondlineThethirdlineThefourthline我有一个字符串,它是以下行之一:第二行我想删除文件中的字符串及其后面的所有行,所以除了字符串之外,它还会删除第三行和第四行。该文件将变为:Thefirstline我在google上搜索过解决方案,看来我应该使用sed。比如:sed'linenum,$d'file但是如何找到字符串的行号呢?或者,我应该怎么做? 最佳答案 如果您不想打印匹配的行(或任何后续行):sed-n'/Thesecondline/q;