我需要在名称中编辑具有特定模式的文件.这些文件分布在多个分层目录中.
我正在使用find其后sed的帮助xargs实现如下相同:
find . -type f -name "file*" | sed -i.bak 's/word1/replace_word1/g'
Run Code Online (Sandbox Code Playgroud)
我的问题是,现在我想从备份文件(*.bak)恢复更改.示例目录树将如下所示.我正在寻找linux命令(可能是一个链)来实现相同的.
$ tree
.
|-- pdir1
| |-- dir1
| | |-- dir2
| | | |-- file2
| | | `-- file2.bak
| | |-- file1
| | `-- file1.bak
| `-- dir3
| |-- file3
| `-- file3.bak
`-- pdir2
|-- file1
`-- file1.bak
Run Code Online (Sandbox Code Playgroud)
我可以使用以下find命令找到所有备份文件.但无法弄清楚下一步该做什么.如果你可以帮我解决这个问题,那将会很明显.
find . -type f -name "file*.bak"
Run Code Online (Sandbox Code Playgroud)
注意
我将此问题视为一般情况.我曾多次遇到这种情况,但却为此编写了一个小包装脚本.在这里,我希望有一个通用而简洁的解决方案.
我有一个表格式的大数据文件需要分析.主要有两列是我感兴趣的,其中一列包含字母数字字母(列#1),另一列包含百分比数字(列#3).
我的要求是根据第3列的值反向排序数据,应用一些阈值(> 10.0)并且只按排序顺序显示符合此条件的所需行,列#1和列#3.
通常我会编写一个小脚perl本来实现这样的要求.但在这里,我正在寻找一系列linux命令(一个班轮)来快速有效地解决它.
样本输入
abc12 24.5 90.0 5
xyz23 454.23 23.5 2
aa34cd 1.345 12.34 6
uvxy 4.25 54.7 1
pqr3t 235.3 6.05 4
abcd 1.234 4.56 3
Run Code Online (Sandbox Code Playgroud)
期望的输出
abc12 90.0
uvxy 54.7
xyz23 23.5
aa34cd 12.34
Run Code Online (Sandbox Code Playgroud)
如果你能帮助我解决这个问题,那将是很明智的.
我试过了什么?
我可以使用以下命令对#3列进行反向排序.不知道下一步是什么!
awk '{print $3}' test.txt | sort -rn
Run Code Online (Sandbox Code Playgroud) 我搜索它没有成功.
我有一个带有pathes的文件.我想要打印所有路径的尾部.例如(对于文件中的每一行):
/homes/work/abc.txt
--> abc.txt
Run Code Online (Sandbox Code Playgroud)
有谁知道怎么做?
谢谢
我想在脚本本身中提取用户名,执行perl脚本.
我正在whoami从perl 执行linux命令,如下所示,它运行得很好.
my $whoami = `whoami`;
chomp $whoami;
print $whoami;
Run Code Online (Sandbox Code Playgroud)
我的目的是摆脱从perl脚本调用系统命令.因此我在寻找Perl唯一的解决方案.我想知道是否有可用的CPAN模块可以提取系统信息.
您对此问题的建议表示赞赏.
我有一个巨大的日志文件(约5-10万行).我需要遍历每一行并进行处理.我看到了巨大的运行时间.
我知道有两种读取文件的方法,perl如下所示.
(1)如何比较不同方法的性能?任何基准标记机制?
(2)什么是最有效的方式和原因?有没有第三种更好的方法?
一种选择是实现这两种方法并检查运行时.但在这里,我试着了解是什么让他们跑得更快或更慢.如果你能在这方面帮助我,那将是件好事.
方法1
open FOPEN, '<', $file or die $!;
my @lines = <FOPEN>;
chomp @lines;
foreach (@lines) {
# do something on $_
}
Run Code Online (Sandbox Code Playgroud)
方法2
open FOPEN, '<', $file or die $!;
while (<FOPEN>) {
chomp;
# do something on $_
}
Run Code Online (Sandbox Code Playgroud) 我有一个文本文件,其中包含所有文件的列表,文件名如下
Test.java_v1
Test.java_v1_v1
Real.cbs_v2_v2
Run Code Online (Sandbox Code Playgroud)
如何使用awk找到其扩展名中包含多一个"_"的文件的名称?
我想要考虑_之后的.事情.
Test_1.java_v1
Test.java_V1_V1
Real.cbs_v2_v2
Run Code Online (Sandbox Code Playgroud)
输出不应该包含Test_1.java_v1,我该怎么做?
如何将字符串插入最后一行的开头?
我想在包含多行的文本文件中添加时间戳
var1 = `date`
LINE1
LINE2
LINE3
...
(INSERT var1 here) LASTLINE
Run Code Online (Sandbox Code Playgroud)
sed 's/^/test line /g' textfile 将字符插入每行的开头但是如何才能专门修改最后一行?
谢谢
前进:
sed '$s/^/sample text /' textfile工作,但仅在插入常规字符串时.如果我试试
var1 = "sample text"
Run Code Online (Sandbox Code Playgroud)
并使用替代,这是我遇到的问题
在sed中使用单引号不会扩展变量,因此sed'$ s/^/$ var1 /'textfile会将字符串$ var1插入到最后一行的开头.
为了启用变量替换,我尝试使用双引号.当我指定确切的行号时,它可以工作.就像是:
sed"5s/^/$ var1 /"textfile
但是当我尝试时sed "$s/^/$var1" text file,它会返回一个错误:
sed:-e expression#1,char 5:命令后的额外字符
有谁可以帮助我吗?