Java 使用非交互式shell脚本获取文本文件的第n行

Java 使用非交互式shell脚本获取文本文件的第n行,java,bash,sh,non-interactive,Java,Bash,Sh,Non Interactive,我需要使用shell脚本获取txt文件的第n行 我的文本文件如下 abc xyz 我需要获取第二行并将其存储在变量中 我尝试过使用以下命令的所有组合: 塞德 awk 头 尾巴 猫 。。。等 问题是,当从终端调用脚本时,所有这些命令都可以正常工作。 但是,当我从java文件调用相同的shell脚本时,这些命令不起作用 我想,这与非交互式shell有关 请帮忙 PS:使用read命令,我可以将第一行存储在变量中 read -r i<edit.txt java代码: try {

我需要使用shell脚本获取txt文件的第n行

我的文本文件如下

abc
xyz
我需要获取第二行并将其存储在变量中

我尝试过使用以下命令的所有组合:

  • 塞德
  • awk
  • 尾巴
  • 。。。等

    问题是,当从终端调用脚本时,所有这些命令都可以正常工作。 但是,当我从java文件调用相同的shell脚本时,这些命令不起作用

    我想,这与非交互式shell有关

    请帮忙

    PS:使用read命令,我可以将第一行存储在变量中

    read -r i<edit.txt
    
    java代码:

    try
        {
            ProcessBuilder pb = new ProcessBuilder("./myScript.sh",someParam);
    
            pb.environment().put("PATH", "OtherPath");
    
            Process p = pb.start(); 
    
            InputStreamReader isr = new InputStreamReader(p.getInputStream());
            BufferedReader br = new BufferedReader(isr);
    
            String line ;
            while((line = br.readLine()) != null)
               System.out.println(line);
    
            int exitVal = p.waitFor();
        }catch(Exception e)
        {  e.printStackTrace();  }
    }
    
    myscript.sh

    read -r i<edit.txt
    echo "session is : "$i    #this prints abc, as required.
    
    resFile=$(echo `sed -n '2p' edit.txt`)    #this ans other similar commands donot do anything. 
    echo "file path is : "$resFile
    

    read-ri打印文件第n行的有效方法(特别适用于大文件):

    此sed命令在打印第二行后立即退出,而不是一直读取文件到最后

    要将其存储在变量中,请执行以下操作:

    line=$(sed '2q;d' file)
    
    或者对第#行使用变量:

    更新:

    Java代码:

    try {
        ProcessBuilder pb = new ProcessBuilder("/bin/bash", "/full/path/of/myScript.sh" );
        Process pr = pb.start(); 
        InputStreamReader isr = new InputStreamReader(pr.getInputStream());
        BufferedReader br = new BufferedReader(isr);
        String line;
        while((line = br.readLine()) != null)
            System.out.println(line);
        int exitVal = pr.waitFor();
        System.out.println("exitVal: " + exitVal);
    } catch(Exception e) {  e.printStackTrace();  }
    
    f=$(dirname $0)/edit.txt
    read -r i < "$f"
    echo "session is: $i"
    
    echo -n "file path is: "
    sed '2q;d' "$f"
    
    Shell脚本:

    try {
        ProcessBuilder pb = new ProcessBuilder("/bin/bash", "/full/path/of/myScript.sh" );
        Process pr = pb.start(); 
        InputStreamReader isr = new InputStreamReader(pr.getInputStream());
        BufferedReader br = new BufferedReader(isr);
        String line;
        while((line = br.readLine()) != null)
            System.out.println(line);
        int exitVal = pr.waitFor();
        System.out.println("exitVal: " + exitVal);
    } catch(Exception e) {  e.printStackTrace();  }
    
    f=$(dirname $0)/edit.txt
    read -r i < "$f"
    echo "session is: $i"
    
    echo -n "file path is: "
    sed '2q;d' "$f"
    
    f=$(dirname$0)/edit.txt
    read-r i<“$f”
    echo“会话为:$i”
    echo-n“文件路径为:”
    sed'2q;d'“$f”
    
    打印文件第n行的有效方法(特别适用于大文件):

    此sed命令在打印第二行后立即退出,而不是一直读取文件到最后

    要将其存储在变量中,请执行以下操作:

    line=$(sed '2q;d' file)
    
    或者对第#行使用变量:

    更新:

    Java代码:

    try {
        ProcessBuilder pb = new ProcessBuilder("/bin/bash", "/full/path/of/myScript.sh" );
        Process pr = pb.start(); 
        InputStreamReader isr = new InputStreamReader(pr.getInputStream());
        BufferedReader br = new BufferedReader(isr);
        String line;
        while((line = br.readLine()) != null)
            System.out.println(line);
        int exitVal = pr.waitFor();
        System.out.println("exitVal: " + exitVal);
    } catch(Exception e) {  e.printStackTrace();  }
    
    f=$(dirname $0)/edit.txt
    read -r i < "$f"
    echo "session is: $i"
    
    echo -n "file path is: "
    sed '2q;d' "$f"
    
    Shell脚本:

    try {
        ProcessBuilder pb = new ProcessBuilder("/bin/bash", "/full/path/of/myScript.sh" );
        Process pr = pb.start(); 
        InputStreamReader isr = new InputStreamReader(pr.getInputStream());
        BufferedReader br = new BufferedReader(isr);
        String line;
        while((line = br.readLine()) != null)
            System.out.println(line);
        int exitVal = pr.waitFor();
        System.out.println("exitVal: " + exitVal);
    } catch(Exception e) {  e.printStackTrace();  }
    
    f=$(dirname $0)/edit.txt
    read -r i < "$f"
    echo "session is: $i"
    
    echo -n "file path is: "
    sed '2q;d' "$f"
    
    f=$(dirname$0)/edit.txt
    read-r i<“$f”
    echo“会话为:$i”
    echo-n“文件路径为:”
    sed'2q;d'“$f”
    
    打印文件第n行的有效方法(特别适用于大文件):

    此sed命令在打印第二行后立即退出,而不是一直读取文件到最后

    要将其存储在变量中,请执行以下操作:

    line=$(sed '2q;d' file)
    
    或者对第#行使用变量:

    更新:

    Java代码:

    try {
        ProcessBuilder pb = new ProcessBuilder("/bin/bash", "/full/path/of/myScript.sh" );
        Process pr = pb.start(); 
        InputStreamReader isr = new InputStreamReader(pr.getInputStream());
        BufferedReader br = new BufferedReader(isr);
        String line;
        while((line = br.readLine()) != null)
            System.out.println(line);
        int exitVal = pr.waitFor();
        System.out.println("exitVal: " + exitVal);
    } catch(Exception e) {  e.printStackTrace();  }
    
    f=$(dirname $0)/edit.txt
    read -r i < "$f"
    echo "session is: $i"
    
    echo -n "file path is: "
    sed '2q;d' "$f"
    
    Shell脚本:

    try {
        ProcessBuilder pb = new ProcessBuilder("/bin/bash", "/full/path/of/myScript.sh" );
        Process pr = pb.start(); 
        InputStreamReader isr = new InputStreamReader(pr.getInputStream());
        BufferedReader br = new BufferedReader(isr);
        String line;
        while((line = br.readLine()) != null)
            System.out.println(line);
        int exitVal = pr.waitFor();
        System.out.println("exitVal: " + exitVal);
    } catch(Exception e) {  e.printStackTrace();  }
    
    f=$(dirname $0)/edit.txt
    read -r i < "$f"
    echo "session is: $i"
    
    echo -n "file path is: "
    sed '2q;d' "$f"
    
    f=$(dirname$0)/edit.txt
    read-r i<“$f”
    echo“会话为:$i”
    echo-n“文件路径为:”
    sed'2q;d'“$f”
    
    打印文件第n行的有效方法(特别适用于大文件):

    此sed命令在打印第二行后立即退出,而不是一直读取文件到最后

    要将其存储在变量中,请执行以下操作:

    line=$(sed '2q;d' file)
    
    或者对第#行使用变量:

    更新:

    Java代码:

    try {
        ProcessBuilder pb = new ProcessBuilder("/bin/bash", "/full/path/of/myScript.sh" );
        Process pr = pb.start(); 
        InputStreamReader isr = new InputStreamReader(pr.getInputStream());
        BufferedReader br = new BufferedReader(isr);
        String line;
        while((line = br.readLine()) != null)
            System.out.println(line);
        int exitVal = pr.waitFor();
        System.out.println("exitVal: " + exitVal);
    } catch(Exception e) {  e.printStackTrace();  }
    
    f=$(dirname $0)/edit.txt
    read -r i < "$f"
    echo "session is: $i"
    
    echo -n "file path is: "
    sed '2q;d' "$f"
    
    Shell脚本:

    try {
        ProcessBuilder pb = new ProcessBuilder("/bin/bash", "/full/path/of/myScript.sh" );
        Process pr = pb.start(); 
        InputStreamReader isr = new InputStreamReader(pr.getInputStream());
        BufferedReader br = new BufferedReader(isr);
        String line;
        while((line = br.readLine()) != null)
            System.out.println(line);
        int exitVal = pr.waitFor();
        System.out.println("exitVal: " + exitVal);
    } catch(Exception e) {  e.printStackTrace();  }
    
    f=$(dirname $0)/edit.txt
    read -r i < "$f"
    echo "session is: $i"
    
    echo -n "file path is: "
    sed '2q;d' "$f"
    
    f=$(dirname$0)/edit.txt
    read-r i<“$f”
    echo“会话为:$i”
    echo-n“文件路径为:”
    sed'2q;d'“$f”
    
    试试这个:

    tail -n+X file.txt | head -1
    
    其中X是您的行号:

    tail -n+4 file.txt | head -1
    
    第四行。

    试试这个:

    tail -n+X file.txt | head -1
    
    其中X是您的行号:

    tail -n+4 file.txt | head -1
    
    第四行。

    试试这个:

    tail -n+X file.txt | head -1
    
    其中X是您的行号:

    tail -n+4 file.txt | head -1
    
    第四行。

    试试这个:

    tail -n+X file.txt | head -1
    
    其中X是您的行号:

    tail -n+4 file.txt | head -1
    


    第四行。

    可能的dup:我试过他的命令,在终端中效果很好。但是当从java程序调用脚本时就不会了。可能的dup:我已经尝试了他的命令,并且在终端中运行良好。但是当从java程序调用脚本时就不会了。可能的dup:我已经尝试了他的命令,并且在终端中运行良好。但是当从java程序调用脚本时就不会了。可能的dup:我已经尝试了他的命令,并且在终端中运行良好。但是,当从java程序调用脚本时,情况就不一样了。也可以使用较短的版本:tail-2 file.txt | head-1,当然可以获取输出并存储在变量中:line=`tail-2 file.txt | head-1`在终端中工作,但是当java程序调用同一个脚本时,也可以使用较短的版本:tail-2 file.txt | head-1,当然,您可以获取输出并存储在变量中:line=`tail-2 file.txt | head-1`在终端中工作,但是当java程序调用同一个脚本时,也可以使用较短的版本:tail-2 file.txt | head-1,当然,您可以获取输出并存储在变量中:line=`tail-2 file.txt | head-1`在终端中工作,但是,当java程序调用同一个脚本时,也可以使用较短的版本:tail-2 file.txt | head-1,当然您可以获取输出并存储在一个变量中:line=`tail-2 file.txt | head-1`在终端中工作,但当java程序在终端中调用同一个脚本时,情况就不同了,但是当java程序调用相同的脚本时,myscript.shI用我建议的shell脚本更新了我的答案。现在可以试试了吗?请再次查看Java和shell脚本代码的更新。这是经过充分测试的代码btwsir,edit.txt文件位于当前目录中。路径不能硬编码。在终端中工作,但当java程序调用同一脚本时不会添加。myscript.shI使用建议的shell脚本更新了我的答案。现在可以试试了吗?请再次查看Java和shell脚本代码的更新。这是经过充分测试的代码btwsir,edit.txt文件位于当前目录中。路径不能硬编码。在终端中工作,但当java程序调用同一脚本时不会添加。myscript.shI使用建议的shell脚本更新了我的答案。现在可以试试了吗?请再次查看Java和shell脚本代码的更新。这是经过充分测试的代码btwsir,edit.txt文件位于当前目录中。路径不能硬编码。在终端中工作,但当java程序调用同一脚本时不会添加。myscript.shI使用建议的shell脚本更新了我的答案。现在可以试试了吗?请再次查看Java和shell脚本代码的更新。这是经过充分测试的代码btwsir,edit.txt文件位于当前目录中。路径不能硬编码。