我想将符合特定模式的行从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)
如果我一个接一个地执行两个命令,我得到了理想的结果.但在这里,我正在寻找一个出于好奇的单行命令,并使脚本更简洁.
非常感谢您的帮助.
我有一个小问题.我正在阅读一些代码,因为我的学校没有教我任何关于perl编程的有用信息,我在这里问你们.我看到这条线在一些perl程序中被大量使用:
$variable = &something();
Run Code Online (Sandbox Code Playgroud)
我不知道&这里的标志是什么意思,因为我从未在perl中说过.这something是一个子程序(我猜).它通常会说出一个名称,它有时也会像函数一样包含参数.有人能告诉我&这里代表什么,这something是什么时候.
变量接受某种返回值,然后用于检查某些条件,这使我认为它是一个子例程.但还是为什么&呢?
谢谢
我有一个包含所有可能元素的引用数组,并按自定义顺序排序,而不是字母数字排序.例如,
@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) 我需要从一个巨大的文件中提取两个匹配模式之间的特定行.
假设pattern1(在文件中唯一)匹配特定的line # n和pattern2 (在文件中不唯一)匹配之后的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)
如果你能帮我解决这个问题,我们将不胜感激
当我浏览一个 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) 我想删除所有前导和尾随空格.除了用字符串中的单个空格替换多个空格,以便字符串中的所有单词完全由单个空格分隔.
我可以使用正则表达式的两次迭代并寻找单个正则表达式解决方案来实现这一点.
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)
如果你能帮助我解决这个问题,那将是件好事.
在/,有没有办法匹配包含正斜杠的模式/而不实际逃避它?
awk '$1~/pattern/' file
Run Code Online (Sandbox Code Playgroud)
只要/模式中没有,上面的命令就可以正常工作.
我正在寻找类似于/在搜索和替换语法中使用不同分隔符的可用内容.
任何帮助,将不胜感激.
如何编写排除特定前缀字符串的正则表达式?
输入示例:"Hello World - How are you today?"
期望的输出:"How are you today?"
要排除的前缀字符串:"Hello world - "
如何在字符串中搜索特定单词/模式的最后一次出现并将其替换为另一个单词?
例如,搜索单词是aaa和替换单词是zzz
输入: aaa bbb ccc bbb aaa
期望的输出: aaa bbb ccc bbb zzz
s/aaa/zzz/替换第一个单词.是否有其他选项可以反向搜索?
我对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)