继本文之后,我使用GPP为 Markdown 解析器pandoc提供了一些宏。不幸的是,gpp似乎将所有空格复制到结果中。
例如,考虑文件 test.md
% Title
% Raphael
% 2012
\lorem \ipsum
Run Code Online (Sandbox Code Playgroud)
和 test.gpp
\define{lorem}{Lorem}
\define{ipsum}{ipsum...}
Run Code Online (Sandbox Code Playgroud)
现在,调用gpp -T --include test.gpp test.md收益
<empty line>
% Title
% Raphael
% 2012
Lorem ipsum...
Run Code Online (Sandbox Code Playgroud)
这打破了pandoc. 额外的换行符确实是定义之间的换行符;如果我使用
\define{lorem}{Lorem}@@@
\define{ipsum}{ipsum...}
Run Code Online (Sandbox Code Playgroud)
使用额外选项+c "@@@" "\n",空行消失了。但是这种变通方法不仅丑陋,而且还有两个致命的缺陷。
首先,它也将其视为@@@源文件中的注释指示符。正如@@@Markdown 中没有禁止的那样,当@@@(或任何其他选择的分隔符)发生在源文件中时,这可能会产生意想不到的后果。
其次,由于适当的缩进,它不会覆盖行开头的空格。例如,
\define{lorem}{@@@
\if{a == a}@@@
@@@
\endif@@@
}@@@
Run Code Online (Sandbox Code Playgroud)
将导致所有此类图像标签缩进四个空格,从而pandoc将其排版为代码(如指定)。
因此,如果没有gpp在一行中编写文件或引入丑陋的行尾注释而不是缩进,您可以做些什么来防止gpp在整个地方涂抹多余的空格?
我用 c 编写了一个终端程序,将制表符转换为空格。我想看看它是否有效以及从制表符转换了多少空格。问题是当我创建一个名为 input.txt 的文件并将其通过管道传输到程序时,它只显示制表符和空格的空白,而不是实际的字符 \t 和 \s。所以我想知道是否有一个现有的终端命令可以获取我的程序的输出并分别用 \t 和 \s 替换制表符和空格:
cat input7.txt | ./detab
abc def
Run Code Online (Sandbox Code Playgroud)
也许是这样的:
cat input7.txt | ./detab | command
abc\s\s\sdef\s\s\s
Run Code Online (Sandbox Code Playgroud)
这样的命令是否已经存在?
我正在尝试通过 SSH 重命名 Synology Diskstation 上的一些文件。可用的外壳是 BusyBox 内置外壳:
BusyBox v1.16.1 (2013-04-16 20:13:10 CST) built-in shell (ash)
Run Code Online (Sandbox Code Playgroud)
当我尝试在源文件名或目标文件名中使用空格字符时,移动命令总是会产生两个错误。转义空格字符或引用文件名似乎没有效果。
在目标中使用空格字符重命名文件的示例:
/volumeUSB1/usbshare/directory $ touch test
/volumeUSB1/usbshare/directory $ ls
test
/volumeUSB1/usbshare/directory $ mv test 'te st'
mv: can't rename 'test': No such file or directory
mv: can't rename 'te': No such file or directory
/volumeUSB1/usbshare/directory $ mv test te\ st
mv: can't rename 'test': No such file or directory
mv: can't rename 'te': No such file or directory
Run Code Online (Sandbox Code Playgroud)
重命名源文件中带有空格字符的文件会产生类似的结果:
/volumeUSB1/usbshare/directory $ touch 'te st' …Run Code Online (Sandbox Code Playgroud) 我需要在变量中存储特定数量的空格。
我试过这个:
i=0
result=""
space() {
n=$1
i=0
while [[ "$i" != $n ]]
do
result="$result "
((i+=1))
done
}
f="first"
s="last"
space 5
echo $f$result$s
Run Code Online (Sandbox Code Playgroud)
结果是“firstlast”,但我预计“first”和“last”之间有5个空格字符。
我怎样才能正确地做到这一点?
我有这个:
#!/bin/bash
for file in `find . -type d`
do
echo $file
done
Run Code Online (Sandbox Code Playgroud)
如果我只有一个名为My Directory的目录,则输出为
My
Directory
Run Code Online (Sandbox Code Playgroud)
我该如何解决?
这echo $file只是暂时的。那里将有其他代码对目录进行操作。
我经常发现自己用鼠标滚轮向后滚动终端以查看命令发出的许多 C++ 模板错误中的第一个。预料到这一点,我将按住Return键从以前的输出中留出一些空间;让我更容易读出第一个错误。我发现这比管道输入更可取,head -n因为那时我必须估计n. 同样,该clear命令仅清除终端屏幕。
有什么比这样按住更快的Return吗?我见过适合脚本编写的解决方案(回声循环;记事本;是/头),但想知道是否有我不知道的简短命令。
我想从文本文件的开头和结尾删除所有“空白”字符,包括 \n(如果存在)。(基本上模仿大多数编程语言的 trim() 函数的行为,如果“文件”是一个大字符串)。
我使用它nano作为文件类型的标准编辑器,它没有内置LilyPond的语法突出显示功能。尽管我在行尾遗漏了很多空白字符,但这并不是我真正需要的。当然,我可以批量删除它们,如从文件中删除尾随空格中所述。
但以某种方式启用此功能应该不会太难,因此我可以从头开始编写更干净的代码。
有人知道该怎么做吗?
就像nanoshell 脚本一样。
我有play一个名为的文件夹,其中包含一个文件damn file(带空格)。当我使用find和管道输出到tar:
find play/ -name 'damn*' | tar cf archive.tar -T -
Run Code Online (Sandbox Code Playgroud)
它完美地工作。为什么这有效find包含应该导致问题的空间的输出tar. 当我使用此命令时:
tar cf archive.tar $(find play/ -name 'damn*')
Run Code Online (Sandbox Code Playgroud)
bash 显示这些错误:
tar: play/damn: Cannot stat: No such file or directory
tar: file: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)
我糊涂了。为什么第一个例子有效?
在我的目录中,我有两个带有空格的文件,foo bar以及another file. 我也有两个没有空间的文件,file1和file2.
以下脚本有效:
for f in foo\ bar another\ file; do file "$f"; done
Run Code Online (Sandbox Code Playgroud)
这个脚本也有效:
for f in 'foo bar' 'another file'; do file "$f"; done
Run Code Online (Sandbox Code Playgroud)
但以下脚本不起作用:
files="foo\ bar another\ file"
for f in $files; do file "$f"; done
Run Code Online (Sandbox Code Playgroud)
甚至这个脚本也不起作用:
files="'foo bar' 'another file'"
for f in $files; do file "$f"; done
Run Code Online (Sandbox Code Playgroud)
但是,如果文件不包含空格,则脚本可以工作:
files="file1 file2"
for f in $files; do file "$f"; done
Run Code Online (Sandbox Code Playgroud)
谢谢!
我的脚本的代码片段:
while getopts "i:a:c:d:f:g:h" arg; …Run Code Online (Sandbox Code Playgroud)