将cat命令输出保存到文件

时间:2019-06-18 13:42:44

标签: linux bash git cat

我使用以下命令保存git clone命令的进度状态,

git clone --progress "https://giturl/repo.git" &> "/var/log/bitbucket.log

使用cat命令查看文件内容时,例如

cat bitbucket.log

我得到下面的输出,这是我需要的,

Cloning into 'xyz'...
POST git-upload-pack (342 bytes)
remote: Counting objects: 2682, done.
remote: Compressing objects: 100% (1237/1237), done.
remote: Total 2682 (delta 1395), reused 2514 (delta 1316)
Receiving objects: 100% (2682/2682), 21.63 MiB | 10.32 MiB/s, done.
Resolving deltas: 100% (1395/1395), done.

但是,当我使用nano,任何其他编辑器或直接从WinSCP打开文件bitbucket.log时,都会得到以下输出,

Cloning into 'xyz'...
POST git-upload-pack (342 bytes)
remote: Counting objects: 2682, done.[K
remote: Compressing objects:   0% (1/1237)   [K
remote: Compressing objects: 100% (1237/1237), done.[K
Receiving objects:   0% (1/2682)
...
Receiving objects:  98% (2629/2682), 15.67 MiB | 10.32 MiB/s   
remote: Total 2682 (delta 1395), reused 2514 (delta 1316)[K
Resolving deltas: 100% (1395/1395)   
Resolving deltas: 100% (1395/1395), done.

我省略了大部分行,但是您可以理解它的状态,它显示了所有操作从0%到100%的进度。

有没有一种方法可以将cat命令的输出保存到文件中,就像上面第一个输出中所示的一样?

谢谢。

1 个答案:

答案 0 :(得分:2)

这是三个简单的选项(其中一个和两个与我上面的评论相同):

  1. 您可以在像vim这样的编辑器中使用基于正则表达式的文本替换来编辑文件,即打开文件,键入并运行替换%s/^.*^K//,其中{{1} }的写法是先输入 Ctrl + V ,然后输入 Ctrl + K
  2. 您可以使用^K以相同的方式编辑文件:
    sed
  3. 首先,您可以使用sed编辑流,方法是将其通过管道传输到文件中:
    sed -i '' $'s/^.*\x0B//' /var/log/bitbucket.log

当我在系统上运行git clone --progress "https://giturl/repo.git" 2>&1 | sed $'s/^.*\x0B//' >/var/log/bitbucket.log时,我得到的字符是cr,而不是垂直制表符,所以我原来是git clone --progress而不是\r