如何删除一行的特定部分?

Jaf*_*son 0 command-line sed text-processing

我正在尝试从文件中删除特定文本。我试过使用sed

sed 's/.*,/{/' beta.txt | head -n5
Run Code Online (Sandbox Code Playgroud)

但是没有得到预期的输出。
这是我得到的输入和输出:

{"url":"example.com","original":"ex.com","tech":"c"}
{"url":"example1.com", jkdshsjkfhdj,"dsd":"sdsd","original":"ex1.com","tech":"d"}
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

{"tech":"c"}
{"tech":"d"}
Run Code Online (Sandbox Code Playgroud)

我期望的是:

{"original":"ex.com","tech":"c"}
{"original":"ex1.com","tech":"d"}
Run Code Online (Sandbox Code Playgroud)

我只是想把original它之前的一切都换成{.

我怎样才能实现它?

Zan*_*nna 5

你没有得到你所期望的,因为正则表达式是贪婪的。匹配除逗号以外[^,]的任何字符而不是任何字符:

$ sed 's/[^,]*,/{/' beta.txt
{"original":"ex.com","tech":"c"}
{"original":"ex1.com","tech":"d"}
Run Code Online (Sandbox Code Playgroud)

但是,由于您的编辑,显然除了original明确之外,所有行上都没有一致的匹配项,所以我们必须这样做……没有多少乐趣。

sed 's/.*,"original/{"original/'
Run Code Online (Sandbox Code Playgroud)