首先使用sed替换文件中的字符串

ind*_*ira 5 unix bash shell replace sed

我想知道如何替换整个文件中第一次出现的搜索模式.例如,

import java.io.File;
import java.io.File;
Run Code Online (Sandbox Code Playgroud)

应该被替换

import java.io.IOException;
import java.io.File;
Run Code Online (Sandbox Code Playgroud)

我如何使用sed实现这一目标?谢谢

bas*_*ist 0

您可以使用 shell 脚本 (Bash)

#!/bin/bash

declare -i toggle=0
while read -r line
do
        case "$line" in
            *import*java.io.File*)
            if [ $toggle -eq 1 ];then
                echo "$line"
                continue
            fi
            echo "import java.io.Exception";
            toggle=1
            continue
            ;;
        esac
        echo "$line"
done < file
Run Code Online (Sandbox Code Playgroud)

样本输出

$> more file
import java.util.Scanner;
import java.io.File;
import java.io.File;

$> bash search_replace.sh
import java.util.Scanner;
import java.io.Exception
import java.io.File;
Run Code Online (Sandbox Code Playgroud)

或者您可以将整个文件放入内存并进行一次性替换

data=$(<file)
echo "${data/import java.io.File;/import java.io.IOException}"
Run Code Online (Sandbox Code Playgroud)