【发布时间】:2013-12-19 06:58:19
【问题描述】:
我需要使用 shell 脚本获取一个 txt 文件的第 n 行。
我的文本文件是这样的
abc
xyz
我需要获取第二行并将其存储在变量中
我已经尝试了所有使用命令的组合,例如:
- sed
- awk
- 头
- 尾巴
- 猫
...等
问题是,当从终端调用脚本时,所有这些命令都可以正常工作。 但是当我从我的 java 文件中调用相同的 shell 脚本时,这些命令不起作用。
我想,这与非交互式外壳有关。
请帮忙
PS:使用读取命令我可以将第一行存储在变量中。
read -r i<edit.txt
这里,“i”是变量,edit.txt是我的txt文件。
但我不知道如何获得第二行。
提前致谢
编辑: ALso 脚本退出,当我使用这些“非工作”命令时,其余命令均未执行。
已经尝试过的命令:
i=`awk 'N==2' edit.txt`
i=$(tail -n 1 edit.txt)
i=$(cat edit.txt | awk 'N==2')
i=$(grep "x" 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
【问题讨论】:
-
我试过他的命令,它在终端上运行良好。但不是从 java 程序调用脚本时。
标签: java bash sh non-interactive