【问题标题】:Why does substring extraction extract entire words instead of characters?为什么子字符串提取提取整个单词而不是字符?
【发布时间】:2019-06-20 14:04:40
【问题描述】:

给定一个文件test.txt,内容为This is a test.,我想提取其内容的子字符串,更具体地说是第二个和第三个字符(hi),使用命令

echo ${$(cat test.txt):1:2}

但是,这会输出第二个和第三个单词 (is a) 而不是单个字符。

我可以的

a=$(cat test.txt)
echo ${a:1:2}

它按预期工作。但我想在一个命令中完成。

有人可以解释这里发生了什么并提供解决方案吗?

编辑:

系统正在运行zsh。

【问题讨论】:

  • 在我的机器上(Debian,使用 bash 4.4),这只会给出“错误替换”错误。它可能不会正式工作。一方面,您在第一个表达式的大括号内使用 $(替换),而不是在第二个表达式中。
  • 您不能在 Bash 中进行嵌套替换。 unix.stackexchange.com/questions/189426/…
  • 对不起,我忽略了系统运行的是 zsh 而不是 bash。
  • @JimDanner 你是对的。显然 zsh 是唯一可以嵌套替换的 shell,但我仍然不明白为什么我的做法会导致观察到的行为。

标签: string substring zsh parameter-expansion


【解决方案1】:

无法准确解释那里发生了什么,但您可以使用sed 作为替代方案:

sed -E 's/.(..).*/\1/' test.txt

只用第二个和第三个字符替换每一行。

【讨论】:

  • 我正在尝试解决黑客挑战,为此我不能在 [;|&`\'"] 中使用字符。这就是我想使用子字符串扩展命令的原因
猜你喜欢
  • 2021-03-15
  • 2023-04-03
  • 1970-01-01
  • 2022-12-15
  • 2013-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
相关资源
最近更新 更多