我试图<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)
如何修改上面的代码只获取目录路径?