小编jks*_*hah的帖子

将匹配模式的行从一个文件移动到另一个文件

我想将符合特定模式的行从file1移动到file2.类似于在Windows中从一个文件切换到另一个文件的操作

比方说,我希望削减方含所有行bar文件1,然后粘贴到新创建的文件2

输入:

文件1

bla foo bla
bla bar bla
bla aaa bla
bla bar bla
bla foo bla
Run Code Online (Sandbox Code Playgroud)

处理后所需的输出:

文件1

bla foo bla
bla aaa bla
bla foo bla
Run Code Online (Sandbox Code Playgroud)

文件2

bla bar bla
bla bar bla
Run Code Online (Sandbox Code Playgroud)

我试过了什么

grep创建所需的file2但不修改file1

grep 'bar' file1 > file2
Run Code Online (Sandbox Code Playgroud)

sed -i修改所需的file1但不创建file2

sed -i '/bar/d' file1
Run Code Online (Sandbox Code Playgroud)

如果我一个接一个地执行两个命令,我得到了理想的结果.但在这里,我正在寻找一个出于好奇的单行命令,并使脚本更简洁.

非常感谢您的帮助.

linux perl awk grep sed

17
推荐指数
2
解决办法
2万
查看次数

Perl使用特殊字符&

我有一个小问题.我正在阅读一些代码,因为我的学校没有教我任何关于perl编程的有用信息,我在这里问你们.我看到这条线在一些perl程序中被大量使用:

$variable = &something();
Run Code Online (Sandbox Code Playgroud)

我不知道&这里的标志是什么意思,因为我从未在perl中说过.这something是一个子程序(我猜).它通常会说出一个名称,它有时也会像函数一样包含参数.有人能告诉我&这里代表什么,这something是什么时候.

变量接受某种返回值,然后用于检查某些条件,这使我认为它是一个子例程.但还是为什么&呢?

谢谢

perl

8
推荐指数
2
解决办法
7190
查看次数

参考已排序的数组对数组进行排序

我有一个包含所有可能元素的引用数组,并按自定义顺序排序,而不是字母数字排序.例如,

@ref_array = ('one','two','three','four','five','six');
Run Code Online (Sandbox Code Playgroud)

现在所有输入数组都需要根据引用数组的顺序进行排序.输入数组将始终是引用数组的子集.

@in1 = ('three','one','five');  # Input
@out1 = ('one','three','five'); # Desired Output

@in2 = ('six','five','four','three','two','one'); # Input
@out2 = ('one','two','three','four','five','six') # Desired Output
Run Code Online (Sandbox Code Playgroud)

arrays sorting perl

8
推荐指数
1
解决办法
246
查看次数

从文件中提取两个模式之间的线条

我需要从一个巨大的文件中提取两个匹配模式之间的特定行.

假设pattern1(在文件中唯一)匹配特定的line # npattern2 (在文件中不唯一)匹配之后的line # m下一个立即匹配line # n.然后我想提取之间和之间的所有行line #n to #m

示例文件内容

***************************************************************************
text line # n-2
text line # n-1
********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
text line # m+1
text line # m+2
***************************************************************************
Run Code Online (Sandbox Code Playgroud)

期望的输出

********************************* Results *********************************
SUCCEEDED
...
...
some text
***************************************************************************
Run Code Online (Sandbox Code Playgroud)

如果你能帮我解决这个问题,我们将不胜感激

linux awk grep sed

8
推荐指数
2
解决办法
2万
查看次数

UNIX:同一路径上的两个同名目录?

当我浏览一个 unix 系统时,我发现五个,两个同名的目录列在同一路径上,当我做了一个 ls -Dl

这是视图,为什么我说五个,两个同名目录.....

//11/# ls -Dl

total 553

drwxrwxr-x  2 root      root          12288 Dec 20  2010 bin

drwxrwxr-x  2 root      root          16384 Sep 28  2010 bin

drwxrwxr-x 11 root      root           4096 Oct 25 06:49 etc

drwxrwxr-x 11 root      root           8192 May 17 07:40 etc

drwxrwxr-x  3 root      root           4096 Sep 28  2010 qnx4

drwxrwxr-x  4 root      root           4096 Jul 26  2010 qnx4

drwxrwxr--  4 root      root           4096 Sep 28  2010 registry

drwxrwxr-x  4 root      root           4096 Aug …
Run Code Online (Sandbox Code Playgroud)

unix directory path

8
推荐指数
2
解决办法
6159
查看次数

删除字符串中的前导,尾随和多个空格

我想删除所有前导和尾随空格.除了用字符串中的单个空格替换多个空格,以便字符串中的所有单词完全由单个空格分隔.

我可以使用正则表达式的两次迭代并寻找单个正则表达式解决方案来实现这一点.

s/^\s+|\s+$//g
s/\s+/ /g
Run Code Online (Sandbox Code Playgroud)

样本输入:

   word1   word2 word3     word4    
Run Code Online (Sandbox Code Playgroud)

期望的输出:

word1 word2 word3 word4
Run Code Online (Sandbox Code Playgroud)

如果你能帮助我解决这个问题,那将是件好事.

regex perl sed

7
推荐指数
2
解决办法
1万
查看次数

使用awk包含正斜杠的搜索模式

/,有没有办法匹配包含正斜杠的模式/而不实际逃避它?

awk '$1~/pattern/' file
Run Code Online (Sandbox Code Playgroud)

只要/模式中没有,上面的命令就可以正常工作.

我正在寻找类似于/在搜索和替换语法中使用不同分隔符的可用内容.

任何帮助,将不胜感激.

awk

7
推荐指数
3
解决办法
1万
查看次数

正则表达式排除前缀字符串?

如何编写排除特定前缀字符串的正则表达式?

输入示例:"Hello World - How are you today?"

期望的输出:"How are you today?"

要排除的前缀字符串:"Hello world - "

regex

6
推荐指数
1
解决办法
7623
查看次数

使用sed向后搜索和替换

如何在字符串中搜索特定单词/模式的最后一次出现并将其替换为另一个单词?

例如,搜索单词是aaa和替换单词是zzz

输入: aaa bbb ccc bbb aaa

期望的输出: aaa bbb ccc bbb zzz

s/aaa/zzz/替换第一个单词.是否有其他选项可以反向搜索?

regex perl sed

5
推荐指数
1
解决办法
4234
查看次数

awk中的浮点计算

我对awk执行浮点计算时的行为感到惊讶.它导致我对表数据进行错误的计算.

$ awk 'BEGIN {print 2.3/0.1}'
23  <-- Ok
$ awk 'BEGIN {print int(2.3/0.1)}'
22  <-- Wrong!

$ awk 'BEGIN {print 2.3-2.2==0.1}'
0   <-- Surprise!
$ awk 'BEGIN {print 2.3-2.2>0.1}'  <-- Din't produce any output :(
$ awk 'BEGIN {print 2.3-2.2<0.1}'
1   <-- Totally confused now ...
Run Code Online (Sandbox Code Playgroud)

有人可以轻视这里有什么东西吗?

编辑1

正如@fedorqui所指出的,由于重定向运算符(>),第二个最后一个命令的输出转到名为0.1的文件.

那么我应该如何执行大于(>)的操作呢?

@fedorqui也提供了解决方案

$ awk 'BEGIN {print (2.3-2.2>0.1)}'
0  <-- Wrong!
Run Code Online (Sandbox Code Playgroud)

floating-point awk

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

perl ×5

awk ×4

sed ×4

regex ×3

grep ×2

linux ×2

arrays ×1

directory ×1

floating-point ×1

path ×1

sorting ×1

unix ×1