【问题标题】:Replace a slash with the word 'slash' in Korn shell scripting在 Korn shell 脚本中用单词“斜线”替换斜线
【发布时间】:2014-04-02 06:04:32
【问题描述】:

我正在使用while 循环逐行读取文件,例如,如果文件包含如下行:

ABC.///.AB_SWift_ABC

我需要替换它

ABC.slashslashslash.AB_SWift_ABC

如何使用 Korn shell 做到这一点?

【问题讨论】:

标签: c shell unix ksh


【解决方案1】:

如果你使用bash,你可以使用变量子串替换功能。

>> a=ABC.///.AB_SWift_ABC >> 回声 $a ABC.///.AB_SWift_ABC >> 回声 ${a//\//斜线} ABC.slashslashslash.AB_SWift_ABC

【讨论】:

  • 我正在使用 KSh @ R Sahu
【解决方案2】:

你为什么要逐行阅读?直接在文件上运行sed 会更快:

sed 's%/%slash%g'

如果您必须在 Bash 中执行此操作,请使用替换 shell parameter expansion

${line//\//slash}

您提到反斜杠但使用正斜杠,这令人困惑。如果你的意思是反斜杠,那么:

sed 's/\\/slash/g'
${lines//\\/slash}

【讨论】:

  • 我正在逐行读取文件并在其中进行一些处理。处理后我试图创建一个新文件。示例:如果该行类似于 ABC.ABC_swift_Q,我将创建一个文件。如果该行包含这样的名称 ABC.///.AB_SWift_ABC 则存在问题... some process > home/dir/ABC.ABC_swift_Q --here 文件被创建 if some process > home/dir/ABC.// /.AB_SWift_ABC --这里将 ABC 作为目录,所以我试图用 SLASH 替换 /
  • 好的;然后,如果您已将行(文件名)读入$line(带有read line 或主题上的小变体),则可以编写mapped=${line//\//slash},然后在需要不带斜杠的名称的地方使用"$mapped" 和@ 987654330@ 需要带斜杠的名称。
  • 当我尝试在 Kshell 中执行此操作时,它给了我糟糕的替换错误
  • 是的; Korn shell 不是 Bash。 AFAIK,您需要在 Korn shell 中使用基于 sed 的解决方案:mapped=$(echo "$line" | sed 's%/%slash%g')
【解决方案3】:

c 中,您可以使用 bash 命令替换 /slash

char cmd[]="sed -i 's|/|slash|g' file";
system(cmd);

所以不需要逐行读取文件。

【讨论】:

    猜你喜欢
    • 2019-01-07
    • 2016-07-15
    • 2013-09-20
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 2015-08-30
    相关资源
    最近更新 更多