我试图<N>
在搜索模式之前只打印第 th 行。grep -B<N>
打印<N>
搜索模式之前的所有行。我在这里看到了 awk 代码,它只能打印<N>
搜索模式后的第 th 行。
awk 'c&&!--c;/pattern/{c=N}' file
Run Code Online (Sandbox Code Playgroud)
如何修改它以仅在<N>
匹配的每一行之前打印第 th 行pattern
?例如,这是我的输入文件
...
...
0.50007496 0.42473932 0.01527831
0.99997456 0.97033575 0.44364198
Direct configuration= 1
0.16929051 0.16544726 0.16608723
0.16984300 0.16855274 0.50171112
...
...
0.50089841 0.42608090 0.01499159
0.99982054 0.97154975 0.44403547
Direct configuration= 2
0.16931296 0.16553376 0.16600890
0.16999941 0.16847055 0.50170694
...
Run Code Online (Sandbox Code Playgroud)
我需要一个可以返回2nd line
搜索字符串之前的命令Direct configuration
。我正在尝试在SUSE-Linux 中运行它
我有一个输入文件,例如,file1
显示如下:
WRITE=2
START=1
SMEAR=0
MIN=6
MAX=100
Run Code Online (Sandbox Code Playgroud)
我的问题是搜索字符串SMEAR
,如果字符串存在,则将整行替换为SMEAR=-5
. 但是,如果SMEAR
不存在,那么我需要插入一个新行SMEAR=-5
。最终这条线SMEAR=-5
应该只出现一次。我可以使用 sed 替换字符串:
sed -i '/SMEAR/c\SMEAR=-5' file1
Run Code Online (Sandbox Code Playgroud)
或者我可以将字符串作为新行插入
sed -i '10i SMEAR=-5' file1
Run Code Online (Sandbox Code Playgroud)
但是如何根据文件中字符串的存在来组合它们?
编辑:
如果我可以将 的值SMEAR
作为变量传递也会有所帮助。
我在一个目录中有三个文件(在 mac-osx 终端中)说
INIT_Struc1
INIT_Struc2
INIT_Struc3
Run Code Online (Sandbox Code Playgroud)
我需要重命名为
FINAL_Struc1
FINAL_Struc2
FINAL_Struc3
Run Code Online (Sandbox Code Playgroud)
当我使用重命名命令(通过自制软件安装)时
rename -n 's/\INIT_$/FINAL_/' INIT_*
Run Code Online (Sandbox Code Playgroud)
它不会重命名文件。我对无法重命名文件的重命名命令做错了什么。
我在多个级别有多个子目录,其中包含一个文件 results.out
./dir1/results.out
./dir2/dir21/results.out
./dir3/dir31/dir311/results.out
Run Code Online (Sandbox Code Playgroud)
现在,我需要寻找string1
在results.out
和这些提取的目录路径results.out
包含string1
,因为我需要这些子目录移动到另一个位置。例如,我可以使用以下代码获取文件路径
for i in $(find . -type f -name "results.out);
do
grep -l "string1" $i
done
Run Code Online (Sandbox Code Playgroud)
如何修改上面的代码只获取目录路径?