标签: whitespace

带引号与不带引号的字符串扩展

  1. for i in $(xrandr); do echo "$i" ; done
  2. for i in "$(xrandr)"; do echo "$i"; done
  3. for i in "$(xrandr)"; do echo $i; done

我明白为什么 1 与 2 不同。但为什么 3 的输出与 2 不同?请解释输出。引号如何在换行符上工作?

shell bash echo quoting whitespace

14
推荐指数
1
解决办法
5625
查看次数

如何让 xargs 处理来自 cat 的空格和特殊字符?

我有一个file包含名称列表的列表。IE:

Long Name One (001)
Long Name Two (201)
Long Name Three (123)
...
Run Code Online (Sandbox Code Playgroud)

带有空格和一些特殊字符。我想用这些名称创建目录,即:

cat file | xargs -l1 mkdir
Run Code Online (Sandbox Code Playgroud)

它使各个目录以空格分隔,即Long, Name, One, Two, Three, 而不是 Long Name One (001), Long Name Two (201), Long Name Three (123)

我怎样才能做到这一点?

shell xargs whitespace

13
推荐指数
2
解决办法
2万
查看次数

bash:空格安全的程序使用 find into select

鉴于这些文件名:

$ ls -1
file
file name
otherfile
Run Code Online (Sandbox Code Playgroud)

bash 本身对于嵌入的空白完全没问题:

$ for file in *; do echo "$file"; done
file
file name
otherfile
$ select file in *; do echo "$file"; done
1) file
2) file name
3) otherfile
#?
Run Code Online (Sandbox Code Playgroud)

但是,有时我可能不想处理每个文件,甚至不希望使用严格的 in $PWD,这是find进来的地方。名义上也处理空格:

$ find -type f -name file\*
./file
./file name
./directory/file
./directory/file name
Run Code Online (Sandbox Code Playgroud)

我正在尝试编造这个scriptlet的 whispace-safe 版本,它将获取输出find并将其呈现到select

$ select file in $(find -type f -name file); do echo $file; break; …
Run Code Online (Sandbox Code Playgroud)

bash text-processing whitespace select

12
推荐指数
3
解决办法
2188
查看次数

匹配一个带有/不带有尾随空格的单词有什么区别?

我正在学习 shell 脚本,为此我正在使用 HackerRank。sed在同一站点上有一个与此相关的问题:“Sed”命令 #1

对于给定的输入文件的每行,变换字“的”与“这个”的第一次出现。搜索和转换应该严格区分大小写。

首先我尝试过,

sed 's/the/this/'
Run Code Online (Sandbox Code Playgroud)

但在那个示例测试用例中失败了。然后我试过了

sed 's/the /this /'
Run Code Online (Sandbox Code Playgroud)

它奏效了。那么,问题来了,这些空格产生了什么不同?我在这里错过了什么吗?

sed whitespace

12
推荐指数
3
解决办法
2443
查看次数

从文件中去除尾随空格

这个问题的答案与sed的去除尾随空白已大部分的答案,但我想

sed -i 's/[ \t]*$//' $1
Run Code Online (Sandbox Code Playgroud)

能够将任意数量的文件参数作为命令行上的 shell 脚本,包括 glob 参数。即假设脚本被称为strip_trailing_whitespace. 然后我希望能够做到这两点

strip_trailing_whitespace foo.cc bar.cc
Run Code Online (Sandbox Code Playgroud)

strip_trailing_whitespace *.cc *.hh
Run Code Online (Sandbox Code Playgroud)

从表单的所有文件中去除尾随空格*.cc*.hh. 不基于上面引用的答案的论点也可以。

sed shell-script whitespace

11
推荐指数
2
解决办法
2万
查看次数

从控制台复制时的尾随空格

这是我偶尔在这里和那里遇到的这种烦人的行为:当您在控制台中用鼠标选择文本(即复制它)时,粘贴它,然后意识到每行末尾都有额外的空格。那是,

line 1                                                                          
line 2                                                                          
Run Code Online (Sandbox Code Playgroud)

代替

line 1
line 2
Run Code Online (Sandbox Code Playgroud)

所以,不仅仅是每一行末尾的一个空格。

我无法可靠地重现该问题,也找不到答案。我相信对于某些软件,它会在一段时间后才会显现出来。

但我只注意到,当我打开在同一文件中vim,从控制台第一个路口右转,然后tmux,它的作品了很好的前一种情况。并且不在后者中。考虑到TERM=xterm-256color控制台,并TERM=screen-256colortmux我的猜想是,它与终端不这样做正确,或不使应用程序正确地去做的事情。我猜是一个相当模糊的猜想。所以,第一个问题是,“究竟是什么导致了它?”

另一个是,“我该怎么做?” 最坏的情况是文件位于远程位置。我以前在本地复制它,gedit最近用它打开。现在我应该可以选择在新控制台中打开它(因为我主要在tmux会话中工作),然后从那里复制。这可以做得更简单吗?

当我vimtmuxwith运行时TERM=xterm-256color vim,它的行为很奇怪。就像没有绘制没有文字的背景一样。而且对我来说改变TERM变量似乎不太好(让软件认为它正在处理其他终端)。

编辑本地文件时,我通常做:!gedit %.

vim terminal tmux clipboard whitespace

11
推荐指数
1
解决办法
1万
查看次数

为什么这个 grep 语句与我期望的相反?

我有一个包含一些 HTML 和一些文本的文件,我只想使用文本行。

我在玩弄grep,试图找到一种方法来排除以 HTML 标记开头的行,甚至是在标记前包含空格的行。

不知何故这对我有用,但我认为它不应该:

grep '^\<' file.htm

它只是向我显示没有 html 的行。你能解释一下为什么吗?我想我需要grep -v一些.*地方来完成这项工作。

linux grep html whitespace text

11
推荐指数
1
解决办法
959
查看次数

为什么 bash 测试对空格如此挑剔?

作为一名主要的 Java 程序员,我发现 bash if-then构造非常令人困惑,尤其是在空格方面。谁能解释为什么第一个有效,而第二个或第三个无效?

#works
if [ -n $1 ]; then echo "parameterized"; fi

#output: ./links: Zeile 1: [-n: Kommando nicht gefunden.
if [-n $1 ]; then echo "parameterized"; fi

#output: ./links: Zeile 1: [: Fehlende `]'
if [ -n $1]; then echo "parameterized"; fi
Run Code Online (Sandbox Code Playgroud)

shell bash whitespace test

10
推荐指数
2
解决办法
7025
查看次数

为什么用 bash 而不是 zsh 剪切失败?

我创建了一个带有制表符分隔字段的文件。

echo foo$'\t'bar$'\t'baz$'\n'foo$'\t'bar$'\t'baz > input
Run Code Online (Sandbox Code Playgroud)

我有以下脚本命名 zsh.sh

#!/usr/bin/env zsh
while read line; do
    <<<$line cut -f 2
done < "$1"
Run Code Online (Sandbox Code Playgroud)

我测试一下。

$ ./zsh.sh input
bar
bar
Run Code Online (Sandbox Code Playgroud)

这工作正常。但是,当我将第一行更改为调用时bash,它失败了。

$ ./bash.sh input
foo bar baz
foo bar baz
Run Code Online (Sandbox Code Playgroud)

为什么这会失败并bash与 一起使用zsh

其他故障排除

  • 在 shebang 中使用直接路径而不是env产生相同的行为。
  • 管道使用echo而不是使用 here-string<<<$line也会产生相同的行为。即echo $line | cut -f 2
  • 使用awk而不是cut 适用于两个外壳。即<<<$line awk '{print $2}'

bash zsh quoting whitespace here-string

10
推荐指数
3
解决办法
3535
查看次数

如何在bash中打印由TAB分隔的字符串?

我正在尝试打印由 TAB 分隔的两个字符串。我试过了:

echo -e 'foo\tbar'
printf '%s\t%s\n' foo bar
Run Code Online (Sandbox Code Playgroud)

他们都打印:

foo     bar
Run Code Online (Sandbox Code Playgroud)

两者之间的空格实际上是 5 个空格(根据在 Putty 中用鼠标选择输出)。

我也尝试过使用 CTRL+V 并在键入命令时按 TAB,结果相同。

强制将选项卡打印为选项卡的正确方法是什么,以便我可以选择输出并将其复制到其他地方,使用选项卡?

第二个问题:为什么 bash 将制表符扩展为空格?

更新:显然,这是 Putty 的问题:https : //superuser.com/questions/656838/how-to-make-putty-display-tabs-within-a-file-instead-of-changed-them-to -空格

bash putty whitespace tabs

9
推荐指数
3
解决办法
2万
查看次数

标签 统计

whitespace ×10

bash ×5

shell ×3

quoting ×2

sed ×2

clipboard ×1

echo ×1

grep ×1

here-string ×1

html ×1

linux ×1

putty ×1

select ×1

shell-script ×1

tabs ×1

terminal ×1

test ×1

text ×1

text-processing ×1

tmux ×1

vim ×1

xargs ×1

zsh ×1