用于替换字符的Shell脚本?

时间:2016-12-02 23:08:08

标签: bash shell

我正在尝试编写一个接收文件的shell脚本(例如file_1_2.txt)并替换任何" _"用"。"(例如file.1.2.txt)。这就是我所拥有的,但是当我运行它时它给我一个空白的输出。

read $var
x= `echo $var | sed 's/\./_/g'`
echo $x

我试图将更改后的文件名存储在变量" x"然后将x输出到控制台。

我通过编写

来调用此脚本
./script2.sh < file_1_2.txt

3 个答案:

答案 0 :(得分:1)

有两个问题。首先,您的代码有一些错误:

read var
x=`echo $var | sed 's/_/\./g'`
echo $x

会奏效。你在$中有一个额外的read var,一个太多的空间(如前所述),你在sed中混合了替换模式(它与你想要的相反)。

此外,如果您想要在文件名中替换_ {/ 1}}

.

如果您使用echo "file_1_2.txt" | ./script2.sh ,则会在您的脚本中读取“file_1_2.txt”的内容。

答案 1 :(得分:1)

另一种解决方案,仅限bash:

var sortedList = listStr.OrderBy(x => int.Parse(x));
var desList = listStr.OrderByDescending(x => int.Parse(x));

(有关详细信息,请参阅bash手册页中的“参数扩展”部分)

您也可以使用$ x=file_1_2.txt; echo "${x//_/.}" file.1.2.txt

执行此操作
rename

答案 2 :(得分:0)

由于bash支持变量替换,因此不需要string_two_points(string type, point & xc):type(type), x(), y() { x=xc; };

x=xc;

如果您对结果感到满意,请删除sed