Java 使用非交互式shell脚本获取文本文件的第n行
我需要使用shell脚本获取txt文件的第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 {
abc
xyz
我需要获取第二行并将其存储在变量中
我尝试过使用以下命令的所有组合:
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文件位于当前目录中。路径不能硬编码。