我需要对驻留在txt文件中的数据进行排序。样本数据如下:
======
Jhon
Doe
score -
------
======
Ann
Smith
score +
------
======
Will
Marrow
score -
------
我只需要提取定义score +
的部分。所以结果应该是
======
Ann
Smith
score +
------
答案 0 :(得分:2)
我会尝试这个:
$ grep -B3 -A1 "score +" myfile
这意味着... grep三行 B 之前和一行 A fter"得分+"。
答案 1 :(得分:1)
试试这个oneliner:
awk -v RS="==*" -F'\n' '{p=0;for(i=1;i<=NF;i++)if($i~/score \+/)p=1}p' file
使用给定的数据输出:
Ann
Smith
score +
------
这个想法是,将所有行除以====...
作为一个多行记录,并检查记录是否包含搜索模式,将其打印出来。
答案 2 :(得分:1)
Sed可以这样做:
package javafxapplication1;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class JavaFXApplication1 extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
sed -n '/^======/{:a;N;/\n------/!ba;/score +/p}' infile
======
Ann
Smith
score +
------
阻止打印,
-n
事情可能会更恰当地与/^======/ { # If the pattern space starts with "======"
:a # Label to branch to
N # Append next line to pattern space
/\n------/!ba # If we don't match "------", branch to :a
/score +/p # If we match "score +", print the pattern space
}
相关联,但在行的末尾有空格,我不确定这些是真实的还是复制粘贴的文物 - 但这对于示例数据。
答案 3 :(得分:1)
使用GNU awk进行多字符RS:
$ awk -v RS='=+\n' '/score \+/' file
Ann
Smith
score +
------
答案 4 :(得分:0)
假设:
$ echo "$txt"
======
Jhon
Doe
score -
------
======
Ann
Smith
score +
------
======
Will
Marrow
score -
------
您可以在awk中创建一个切换类型匹配,以便仅打印您想要的部分:
$ echo "$txt" | awk '/^=+/{f=1;s=$0;next} /^score \+/{f=2} f {s=s"\n"$0} /^-+$/ {if(f==2) {print s} f=0}'
======
Ann
Smith
score +
------
答案 5 :(得分:0)
假设您有一个真正的固定格式文件,您可以使用 fgrep (或GNU或BSD grep 以及快速--fixed-strings
标志) --before-context
和--after-context
标志。例如:
$ fgrep -A1 -B3 'score +' /tmp/foo
======
Ann
Smith
score +
------
标志会找到你的匹配,并包括前面的三行和每次匹配后的一行。这为您提供了所需的输出,但复杂程度远低于sed或awk脚本。 YMMV。