Questions tagged «text-processing»

通过程序,脚本等操作或检查文本

8
sed在整个文件系统上就地删除行?
由于尚无法诊断的应用程序错误,我有数百台服务器装有完整的磁盘。有一个文件被重复的行填充了-不是日志文件,而是带有变量定义的用户环境文件(因此,我不能只是删除该文件)。 我编写了一个简单的sed命令来检查错误添加的行并删除它们,然后在文件的本地副本上对其进行测试。它按预期工作。 但是,当我在具有完整磁盘的服务器上尝试使用它时,大约收到以下错误(来自内存,而不是复制和粘贴): sed: couldn't flush /path/to/file/sed8923ABC: No space left on deviceServerHostname 当然,我知道这里没有空间了。这就是为什么我要删除内容!(sed我正在使用的命令会将4000+行文件减少到大约90行。) 我的sed命令就是sed -i '/myregex/d' /path/to/file/filename 尽管磁盘已满,有没有办法应用此命令? (它必须是自动化的,因为我需要将它作为快速修复程序应用于几百台服务器。) (显然,需要诊断应用程序错误,但是在此期间,服务器无法正常工作...。) 更新:通过删除我发现可以删除的其他内容解决了我所面临的情况,但是我仍然希望得到此问题的答案,这将对将来和其他人有所帮助。 /tmp不行 它在同一文件系统上。 在释放磁盘空间之前,我进行了测试,发现可以vi打开文件并运行以删除行:g/myregex/d,然后使用保存成功:wq。似乎应该可以自动执行此操作,而无需借助单独的文件系统来保存临时文件....(?)

5
仅在第一行匹配特定模式时才如何打印文件内容?
我正在编写脚本,我想检查文件的第一行是否匹配特定的模式,然后将其打印出来。我该如何实现? 如何检查图案?有没有一种方法可以检查模式并根据输出执行某些操作。 编辑:请看一下这个问题:https : //stackoverflow.com/questions/5536018/how-to-get-match-regex-pattern-using-awk-from-file 我想要这样的东西,但是他们都没有为我工作。我基本上想检查第一行是否匹配正则表达式模式,并根据该结果打印文件行。

6
从文件中删除行,具体取决于在另一个文件中找到的行
文件file1.txt包含以下行: /api/purchase/<hash>/index.html 例如: /api/purchase/12ab09f46/index.html 文件file2.csv包含以下行: <hash>,timestamp,ip_address 例如: 12ab09f46,20150812235200,22.231.113.64 a77b3ff22,20150812235959,194.66.82.11 我想过滤file2.csv,以删除在file1.txt中也存在哈希值的所有行。就是说: cat file1.txt | extract <hash> | sed '/<hash>/d' file2.csv 或类似的东西。 它应该很简单,但是我似乎无法使其工作。 任何人都可以为该任务提供有效的管道吗?

4
以固定宽度打印手册页
使用示例命令 man apropos > outputfile 将生成一个文本文件,其中包含的格式化man页面apropos(与man apropos直接打印在屏幕上的字体有一些细微差别,例如粗体字符)。 但是我想手动设置生成的输出文件的最大行宽,以便所有段落都可以证明为该宽度。 man页面是通过创建的groff:例如,我试图将.ll 50原始.gz man源文本文件的段落放在前面,但是如果我需要在多个man页面上工作,这是微不足道的。此外,并非所有字符都可以识别: apropos.1:45: warning: can't find character with input code 195 apropos.1:45: warning: can't find character with input code 168 apropos.1:47: warning: can't find character with input code 178 apropos.1:131: warning: can't find character with input code 169 因此,我想知道是否存在更直接的方法。在创建过程中如何修改最大线宽outputfile?有一些特定的命令吗? 编辑: (以下所有注意事项均与Ubuntu …

3
如何合并两列中的值?
我有以下格式的文件: $ cat /tmp/raw 2015-01 5000 1000 2015-02 6000 2000 2015-03 7000 3000 现在,我想要从每行的第2列和第3列中获取组合值,以便结果如下: 2015-01 6000 2015-02 8000 2015-03 9000 我试过了,但它只显示文件中的最后一个值,如2015-03值。

4
根据匹配字段对列总和
我有一个以下格式的大文件: 2 1019 0 12 2 1019 3 0 2 1021 0 2 2 1021 2 0 2 1022 4 5 2 1030 0 1 2 1030 5 0 2 1031 4 4 如果第2列中的值匹配,我想对两行的第3列和第4 列中的值求和,否则仅对唯一行中的值求和。 所以我希望的输出看起来像这样: 2 1019 15 2 1021 4 2 1022 9 2 1030 6 2 1031 …

9
如何打印字符串中最长的数字?
我正在寻找一种打印字符串中最长数字的方法。 例如:如果我有字符串 212334123434test233 我该如何打印 212334123434 ? 注意:我正在寻找最长的连续数字序列,而不是数字更高的值。 编辑:谢谢大家的回答。对这个问题的反应非常热烈。我将@HaukeLaging的帖子标记为可接受的答案,因为它非常适合我的具体情况,但我想指出,所有答案都同样有效。有几种不同的选择解决一个问题总是很高兴。

6
从bibtex文件中提取选定条目的脚本
我有一个很大的bibtex文件,其中包含许多条目,每个条目都具有常规结构 @ARTICLE{AuthorYear, item = {...}, item = {...}, item = {...}, etc } (在某些情况下,ARTICLE可能是一个不同的词,例如BOOK) 我想做的是编写一个简单的脚本(最好仅是一个Shell脚本)以提取具有给定AuthorYear的条目并将其放入新的.bib文件中。 我可以想象我可以通过AuthorYear识别条目的第一句,而通过单引号可以识别条目的末尾,}也许可以sed用来提取条目,但是我真的不知道该怎么做。有人可以告诉我我将如何实现这一目标吗? 可能应该是这样的 sed -n "/AuthorYear/,/\}/p" file.bib 但这由于}条目的第一项的关闭而停止,从而给出以下输出: @ARTICLE{AuthorYear, item = {...}, 因此,我需要识别出这是否}是一行中唯一的字符,并且在这种情况下,只有“ sed”停止读取。

6
更好的粘贴命令
我有以下两个文件(我用点填充了行,因此文件中的每一行都具有相同的宽度,并将file1设置为大写,以使其更加清晰)。 contents of file1: ETIAM...... SED........ MAECENAS... DONEC...... SUSPENDISSE contents of file2 Lorem.... Proin.... Nunc..... Quisque.. Aenean... Nam...... Vivamus.. Curabitur Nullam... 请注意,file2比file1长。 当我运行此命令时: paste file1 file2 我得到这个输出 ETIAM...... Lorem.... SED........ Proin.... MAECENAS... Nunc..... DONEC...... Quisque.. SUSPENDISSE Aenean... Nam...... Vivamus.. Curabitur Nullam... 我要怎么做才能使输出如下? ETIAM...... Lorem.... SED........ Proin.... MAECENAS... Nunc..... DONEC...... Quisque.. …

3
首先使用awk处理最后一行
我有一个要awk基于最后一个数据点进行规范化的数据文件。因此,我想先访问最后一个数据点,以规范化数据,然后正常处理。 以下方法使用tac两次即可完成工作,但可能比必要的方法复杂。 $ cat file 0 5 1 2 2 3 3 4 $ tac file | awk 'NR==1{norm=$2} {print $1, $2/norm}' | tac 0 1.25 1 0.5 2 0.75 3 1 我的问题是:仅使用awk是否可以获得上述结果? 我认为答案是“不,awk逐行扫描文件”,但我愿意提出替代建议。

12
过滤文本文件以删除空行的好方法是什么?
我有一个.csv文件(在Mac上),有一堆空行,例如: "1", "2", "lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum ","2","3","4" "1", "2", "lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum …

4
如何在bash中找到两个字符串的重叠部分?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Unix&Linux Stack Exchange 的主题。 5年前关闭。 我有两个琴弦。为了示例,它们的设置如下: string1="test toast" string2="test test" 我想要的是找到从字符串开头开始的重叠。在上面的示例中,重叠是指字符串“ test t”。 # I look for the command command "$string1" "$string2" # that outputs: "test t" 如果字符串是字符串,string1="atest toast"; string2="test test"则从开始检查开始,以“ a”开头,则它们将没有重叠string1。

7
`highlight`命令
在将整个字符串传递到stdout时,是否可以使用命令轻松突出显示(带有颜色,粗体文本或反向的前/后背景)特定字符串?我正在考虑构建它,但是如果它已经存在,我宁愿使用它。一些理想的功能: 单独的突出显示字符串以自动方式以不同的方式突出显示。例如,第一个字符串将以红色突出显示,第二个字符串以绿色突出显示,第三个字符串以蓝色突出显示(无需手动配置)。 检测颜色支持并退回到可用的粗体/反转/其他突出显示方法。 允许匹配正则表达式和文字字符串。 如果匹配重叠,最好做一些聪明的事情,例如“ foobar”和“ barbar”。 除了添加颜色代码外,在stdin和stdout之间没有任何修改。


2
sed-在多个文件中应用更改
我有数百个包含“ </foo:bar>” 的文件 cc bb aa </foo:bar> dd xx vv 我想一次全部更改为 cc bb aa </foo:bar> 当我给它确切的文件名时,sed效果很好 sed -i“ / </ foo:bar> / q” 99999.txt 但是当我尝试一次更改所有这些内容时,我没有任何结果。 sed -i "/<\/foo:bar>/q" *.txt

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.