【问题标题】:Inserting a text into a file, like adding an array element将文本插入文件,例如添加数组元素
【发布时间】:2015-04-30 13:05:04
【问题描述】:

我有一个 JavaScript 文件,如下所示。

Me.dat

var fruit = [
 "Apple",
 "Mango",
 "Orange"
];

var players = [
 "Sachin",
 "Dhoni",
 "Kapil Dev"
];

我需要动态地将一个元素添加到这些数组中的任何一个。(实际上是在文件中)。

根据作业状态,我会插入到相应的数组中。

比如说,

addMe "Grapes" "fruits"

会创建一个文件,

var fruit = [
 "Apple",
 "Mango",
 "Orange",
 "Grapes" ---------Added newly!!!
];

var players = [
 "Sachin",
 "Dhoni",
 "Kapil Dev"
];

所以,我必须在文件的第 5 行插入文本“Grapes”。


这就是我现在所拥有的......

我的脚本:

SEARCHTERM="fruits";
TO_BE_ADDED="Grapes";
#take the start line number and end linenumer of the array..
startlinenum=`grep -n $SEARCHTERM me.dat | cut -d ":" -f1 | head -1`;
endlinenum=`tail +$startlinenum me.dat | grep -n "]" | head -1 | cut -d ":" -f1`;
endlinenum=`expr $startlinenum + $endlinenum - 2`;

echo "\"$TO_BE_ADDED\"" > to_be_added.dat;

echo "ENd line is : ${endlinenum}";

sed "${endlinenum}r to_be_added.dat" me.dat

我得到了输出

var fruits = [
 "Apple",
 "Mango",
 "Orange" ------ How would I remove this Comma ? :(
"Grapes" ------ Added Correctly....
];

我在这里做对了吗?还是有更简单的方法?

请帮忙。我如何删除我在之前的 sn-p 中提到的逗号。

【问题讨论】:

  • 不,你做错了。 UNIX shell 只是一个环境,可以从中调用 UNIX 工具,并使用一种语言来对这些调用进行排序。处理文本的 UNIX 工具是 awk。所以废弃所有的 shell/sed/grep 的东西,然后调用 awk,
  • @EdMorton 是的,我只是尝试了我所知道的一切。我很少得到这样的工作。而这个我有兴趣自己尝试一下..(工作满意度:))还是非常感谢。

标签: shell unix sed ksh


【解决方案1】:

使用 GNU awk 进行 gensub():

$ gawk -v add="Grapes" -v tgt="fruit" -v RS= -v ORS="\n\n" -v FS="\n" '
  $1~" "tgt" "{$0=gensub(/(([ \t]+)"[^"]+")(\n];)/,"\\1,\n\\2\""add"\"\\3","")}1
' Me.dat
var fruit = [
 "Apple",
 "Mango",
 "Orange",
 "Grapes"
];

var players = [
 "Sachin",
 "Dhoni",
 "Kapil Dev"
];

【讨论】:

    【解决方案2】:

    这会破坏您的格式(将修改后记录中的所有空格替换为单个空格),但也许这会有所帮助:

    $ TOBEADDED=banana
    $ SEARCHTERM=fruit
    $ awk '/var '$SEARCHTERM'/{$(NF-1)=$(NF-1)", \"'$TOBEADDED'\""}1' RS= Me.dat
    var fruit = [ "Apple", "Mango", "Orange", "banana" ];
    var players = [
            "Sachin",
            "Dhoni",
            "Kapil Dev"
    ];
    

    修改解决方案以将格式放回原处相当容易,但这样做会使解决方案变得模糊,所以我将保持原样。

    【讨论】:

    • 谢谢,但很抱歉,我确实收到了awk 编译错误。我不是 awk 的专家。
    • 不确定您的编译错误。我将使用显示用法的完整成绩单编辑答案。
    • 由于某些原因,我在 UNIX 中的 awk 版本给了我 awk:bail out.. 错误。但它与我的 Windows PC 中的gawk 版本完美配合。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多